diff --git a/src/main/java/cat/udl/eps/softarch/demo/config/WebSecurityConfig.java b/src/main/java/cat/udl/eps/softarch/demo/config/WebSecurityConfig.java index e5622a4..319d061 100644 --- a/src/main/java/cat/udl/eps/softarch/demo/config/WebSecurityConfig.java +++ b/src/main/java/cat/udl/eps/softarch/demo/config/WebSecurityConfig.java @@ -45,6 +45,7 @@ protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exce .requestMatchers(HttpMethod.POST, "/properties").hasAuthority("ROLE_OWNER") .requestMatchers(HttpMethod.PUT, "/properties/*").hasAuthority("ROLE_OWNER") .requestMatchers(HttpMethod.DELETE, "/properties/*").hasAuthority("ROLE_OWNER") + .requestMatchers(HttpMethod.POST, "/students").permitAll() .requestMatchers(HttpMethod.POST, "/visits").authenticated() .requestMatchers(HttpMethod.DELETE, "/visits/*").authenticated() .requestMatchers(HttpMethod.POST, "/*/*").authenticated() diff --git a/src/main/java/cat/udl/eps/softarch/demo/repository/StudentRepository.java b/src/main/java/cat/udl/eps/softarch/demo/repository/StudentRepository.java index 057bde1..da5250c 100644 --- a/src/main/java/cat/udl/eps/softarch/demo/repository/StudentRepository.java +++ b/src/main/java/cat/udl/eps/softarch/demo/repository/StudentRepository.java @@ -1,7 +1,12 @@ package cat.udl.eps.softarch.demo.repository; +import cat.udl.eps.softarch.demo.domain.Property; import cat.udl.eps.softarch.demo.domain.Student; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; + +import java.util.List; public interface StudentRepository extends CrudRepository { + Student findByEmail(@Param("email") String email); } diff --git a/src/test/java/cat/udl/eps/softarch/demo/steps/CreateStudentStepDefs.java b/src/test/java/cat/udl/eps/softarch/demo/steps/CreateStudentStepDefs.java new file mode 100644 index 0000000..dd981e0 --- /dev/null +++ b/src/test/java/cat/udl/eps/softarch/demo/steps/CreateStudentStepDefs.java @@ -0,0 +1,74 @@ +package cat.udl.eps.softarch.demo.steps; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import cat.udl.eps.softarch.demo.domain.Student; +import cat.udl.eps.softarch.demo.repository.StudentRepository; +import io.cucumber.java.en.And; +import io.cucumber.java.en.When; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +import java.nio.charset.StandardCharsets; + +public class CreateStudentStepDefs { + @Autowired + private StepDefs stepDefs; + + @Autowired + private StudentRepository studentRepository; + + @When("^I create a student with username \"([^\"]*)\" and password \"([^\"]*)\" and email \"([^\"]*)\" and phoneNumber \"([^\"]*)\" and name \"([^\"]*)\"$") + public void createStudent(String username, String password, String email, String phoneNumber, String name) throws Throwable { + Student studentTest = new Student(); + + studentTest.setUsername(assignValueInput(username)); + studentTest.setEmail(assignValueInput(email)); + studentTest.setPhoneNumber(assignValueInput(phoneNumber)); + studentTest.setName(assignValueInput(name)); + + + + stepDefs.result = stepDefs.mockMvc.perform( + post("/students") + .contentType(MediaType.APPLICATION_JSON) + .content(new JSONObject( + stepDefs.mapper.writeValueAsString(studentTest) + ).put("password", assignValueInput(password)).toString()) + .characterEncoding(StandardCharsets.UTF_8)) + .andDo(print()); + + } + + private String assignValueInput(String value) { + if(value.equals("null")){ + return null; + } + else { + return value; + } + } + + @And("^There is 0 Student created$") + public void thereIs0StudentCreated() throws Throwable { + assertEquals(studentRepository.count(), 0); + } + + @And("^There is 1 Student created with username \"([^\"]*)\" and email \"([^\"]*)\" and phoneNumber \"([^\"]*)\" and name \"([^\"]*)\"$") + public void thereIs1StudentCreated(String username, String email, String phoneNumber, String name) throws Throwable { + assertEquals(studentRepository.count(), 1); + Student studentToCheck = this.studentRepository.findByEmail(email); + assertEquals(studentToCheck.getUsername(), username); + assertEquals(studentToCheck.getName(), name); + assertEquals(studentToCheck.getPhoneNumber(), phoneNumber); + assertEquals(studentToCheck.getEmail(), email); + } +} diff --git a/src/test/resources/features/CreateStudent.feature b/src/test/resources/features/CreateStudent.feature new file mode 100644 index 0000000..c5bfc80 --- /dev/null +++ b/src/test/resources/features/CreateStudent.feature @@ -0,0 +1,72 @@ +Feature: Create Student + In order to look for properties as an student + I want to create an student profile + + + Scenario: Create a Student with valid data + Given I'm not logged in + When I create a student with username "student" and password "password" and email "student@student.app" and phoneNumber "123123123" and name "Student" + Then The response code is 201 + And There is 1 Student created with username "student" and email "student@student.app" and phoneNumber "123123123" and name "Student" + + + Scenario: Create a student with a blank email: + Given I'm not logged in + When I create a student with username "student" and password "password" and email "" and phoneNumber "123123123" and name "Student" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with a blank password: + Given I'm not logged in + When I create a student with username "student" and password "" and email "student@student.app" and phoneNumber "123123123" and name "Student" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with an empty phoneNumber: + Given I'm not logged in + When I create a student with username "student" and password "password" and email "student@student.app" and phoneNumber "" and name "Student" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with an empty name: + Given I'm not logged in + When I create a student with username "student" and password "password" and email "student@student.app" and phoneNumber "123123123" and name "" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with an empty username: + Given I'm not logged in + When I create a student with username "" and password "password" and email "student@student.app" and phoneNumber "123123123" and name "" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with a null email: + Given I'm not logged in + When I create a student with username "student" and password "password" and email "null" and phoneNumber "123123123" and name "Student" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with a null password: + Given I'm not logged in + When I create a student with username "student" and password "null" and email "student@student.app" and phoneNumber "123123123" and name "Student" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with an null phoneNumber: + Given I'm not logged in + When I create a student with username "student" and password "password" and email "student@student.app" and phoneNumber "null" and name "Student" + Then The response code is 400 + And There is 0 Student created + + Scenario: Create a student with an null name: + Given I'm not logged in + When I create a student with username "student" and password "password" and email "student@student.app" and phoneNumber "123123123" and name "null" + Then The response code is 400 + And There is 0 Student created + + + Scenario: Create a student with a null username: + Given I'm not logged in + When I create a student with username "null" and password "password" and email "student@student.app" and phoneNumber "123123123" and name "" + Then The response code is 400 + And There is 0 Student created \ No newline at end of file