Skip to content

Conversation

@newmaldenite
Copy link
Collaborator

Pull Request: Complete Functionality for Creating New Posts

This pull request introduces the complete functionality for creating a new post, covering the service layer, client implementation, and a new CI pipeline. It allows the application to validate user input and send a POST request to the JSONPlaceholder API to create a new resource.


Changes Included

Service Layer (PostServiceImpl)

  • Introduced a new createPost method.
  • Added business logic to validate that post titles are not null, empty, or blank before making an API call.
  • Fully unit-tested using Mockito to cover:
    • Success scenarios
    • Input validation failures
    • Client failure scenarios
  • Refactored redundant tests into a single, robust Parameterized Test.

Client Layer (JsonPlaceholderClient)

  • Implemented the createPost method to perform a live HTTP POST request.
  • Handles object serialization to JSON and sets the required Content-Type header.
  • Correctly checks for a 201 Created status code.
  • Added an integration test to verify the implementation against the live API.

Continuous Integration (ci.yml)

  • Introduced a new GitHub Actions workflow to automate the build and test process.
  • The workflow triggers on any push or pull request to the main branch, ensuring that all tests must pass before a merge can occur.

Implements business logic in the `PostServiceImpl` to prevent the creation of posts with invalid titles.

- Adds a validation check to ensure that the post title is not null, empty, or blank (contains only whitespace).
- If the title is invalid, the service returns `Optional.empty()` immediately and does not make a downstream call to the API client.

The unit tests have been updated to cover these validation scenarios:
- Refactored the null and blank title tests into a single, more thorough parameterized test using `@NullAndEmptySource` and `@ValueSource`.
- Added a new test to confirm that the service correctly handles and propagates failures from the API client.
Implements the `createPost` method in the `JsonPlaceholderClient` to perform a live HTTP POST request.

- Serializes the `Post` object to a JSON string for the request body.
- Sets the `Content-Type: application/json` header, which is required for the API to correctly interpret the request.
- Checks for a `201 Created` status code to confirm a successful creation.
- Adds a corresponding integration test to `PostApiTests` to verify the live API call and response parsing.
@newmaldenite newmaldenite merged commit 60031e2 into main Dec 2, 2025
1 check passed
@newmaldenite newmaldenite deleted the feat/implement-get-post-by-id-test branch December 2, 2025 16:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants