diff --git a/test/Cases/UserTest.php b/test/Cases/UserTest.php new file mode 100644 index 0000000..ff17bb0 --- /dev/null +++ b/test/Cases/UserTest.php @@ -0,0 +1,94 @@ + 'John Doe', + 'email' => 'john@example.com', + 'password' => 'Password1@', + ]; + $response = $this->post('/users', $user); + + $this->assertSame(201, $response->getStatusCode()); + $responseContent = $response->toArray(); + $this->assertArrayHasKey('id', $responseContent); + unset($responseContent['id']); + $this->assertSame($user, $responseContent); + } + + public function testAddDuplicateUser() + { + $user = [ + 'name' => 'John Doe', + 'email' => 'john@example.com', + 'password' => 'Password1@', + ]; + $response = $this->post('/users', $user); + + $this->assertSame(409, $response->getStatusCode()); + $responseContent = $response->toArray(); + $this->assertSame('User already exists.', $responseContent['message']); + } + + public function testAddUserInvalidEmail() + { + $user = [ + 'name' => 'John Doe', + 'email' => 'johnexample.com', + 'password' => 'Password1@', + ]; + $response = $this->post('/users', $user); + + $this->assertSame(400, $response->getStatusCode()); + $responseContent = $response->toArray(); + $this->assertSame('Invalid email address.', $responseContent['message']); + } + + public function testAddUserInvalidPassword() + { + $user = [ + 'name' => 'John Doe', + 'email' => 'john@example.com', + 'password' => 'password', + ]; + $response = $this->post('/users', $user); + + $this->assertSame(400, $response->getStatusCode()); + $responseContent = $response->toArray(); + $this->assertSame('Password must contain at least one uppercase letter, one lowercase letter, one number and one special character.', $responseContent['message']); + } + + public function testAddUserInvalidName() + { + $user = [ + 'name' => 'J1', + 'email' => 'john@example.com', + 'password' => 'Password1@', + ]; + $response = $this->post('/users', $user); + + $this->assertSame(400, $response->getStatusCode()); + $responseContent = $response->toArray(); + $this->assertSame('Name must have at least two characters and cannot contain numbers.', $responseContent['message']); + } +}