{"id":26874194,"url":"https://github.com/uzrnem/note-app-spring-boot","last_synced_at":"2026-04-08T11:32:05.375Z","repository":{"id":40549903,"uuid":"487312801","full_name":"uzrnem/note-app-spring-boot","owner":"uzrnem","description":"Sping Boot crud app for Notes , mysql, jpa, aop, docker, jwt, swagger, java and maven","archived":false,"fork":false,"pushed_at":"2025-08-08T01:28:28.000Z","size":146,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T13:36:17.126Z","etag":null,"topics":["aop","crud","docker","docker-compose","java","jpa","jwt","maven","mysql","note","notes","notes-app","spring","spring-boot","swagger"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uzrnem.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-30T15:28:46.000Z","updated_at":"2025-08-08T01:28:32.000Z","dependencies_parsed_at":"2025-08-08T19:01:55.458Z","dependency_job_id":null,"html_url":"https://github.com/uzrnem/note-app-spring-boot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/uzrnem/note-app-spring-boot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzrnem%2Fnote-app-spring-boot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzrnem%2Fnote-app-spring-boot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzrnem%2Fnote-app-spring-boot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzrnem%2Fnote-app-spring-boot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uzrnem","download_url":"https://codeload.github.com/uzrnem/note-app-spring-boot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzrnem%2Fnote-app-spring-boot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31554079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aop","crud","docker","docker-compose","java","jpa","jwt","maven","mysql","note","notes","notes-app","spring","spring-boot","swagger"],"created_at":"2025-03-31T09:34:12.047Z","updated_at":"2026-04-08T11:32:05.347Z","avatar_url":"https://github.com/uzrnem.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"before running spring boot app make sure db is created on mysql\n\nalso you can setup config in environment or in application.yml\n\nthen run\n\nOn Docker\ndocker-compose up -d\n\nOn Local\nmvn spring-boot:run\n\n### To use H2 DB\nmvn spring-boot:run -Dspring-boot.run.profiles=test\n\n\ngit@github.com:Java-Techie-jt/spring-reactive-mongo-crud.git\n\n\n#### Test cases written\n\u003e Mock Private Field\n```java\norg.springframework.test.util.ReflectionTestUtils.setField(myService, \"dependency\", mockDependency);\n```\n\u003cbr /\u003e\n\n\u003e Parameterized Test cases ( one in many )\n```java\nprivate static Stream\u003cArguments\u003e provideStringsForIsBlank() {\n    return Stream.of(\n      Arguments.of(null, true),\n      Arguments.of(\"\", true),\n      Arguments.of(\"  \", true),\n      Arguments.of(\"not blank\", false)\n    );\n}\n@ParameterizedTest\n@MethodSource(\"provideStringsForIsBlank\")\nvoid isBlank_ShouldReturnTrueForNullOrBlankStrings(String input, boolean expected) {\n    assertEquals(expected, Strings.isBlank(input));\n}\n```\n\u003cbr /\u003e\n\n\u003e ArgumentCaptor\n```java\n@Test\nvoid testGetAll() {\n    when(noteRepository.getByUserId(anyInt())).thenReturn(List.of(note));\n\n    List\u003cNoteResponse\u003e list = noteService.list(1);\n    \n    assertEquals(list.get(0).getContent(), note.getContent());\n    ArgumentCaptor\u003cInteger\u003e intArgument = ArgumentCaptor.forClass(Integer.class);\n    verify(noteRepository).getByUserId(intArgument.capture());\n    assertEquals(note.getUser().getId(), intArgument.getValue());\n}\n```\n\u003cbr /\u003e\n\n\u003e Captured Output or Log Verification\n```java\nimport org.junit.jupiter.api.Test;\nimport org.junit.jupiter.api.extension.ExtendWith;\nimport org.springframework.boot.test.system.CapturedOutput;\nimport org.springframework.boot.test.system.OutputCaptureExtension;\n\n@ExtendWith(OutputCaptureExtension.class)\nclass MyServiceTest {\n\n    @Test\n    void testServiceOutput(CapturedOutput output) {\n        // Call your service method that produces output\n        System.out.println(\"Hello from service!\");\n\n        // Assert on the captured output\n        assertThat(output).contains(\"Hello from service!\");\n    }\n}\n```\n\u003cbr /\u003e\n\n\u003e WireMock\n```java\n// implementation 'org.wiremock.integrations:wiremock-spring-boot:3.10.0'\n\n@SpringBootTest(classes = ExamplesTests.AppConfiguration.class)\n@EnableWireMock\nclass ExampleTests {\n\n  @Value(\"${wiremock.server.baseUrl}\")\n  private String wireMockUrl;\n\n  @Test\n  void returns_a_ping() {\n    stubFor(get(\"/ping\").willReturn(ok(\"pong\")));\n\n    RestClient client = RestClient.create();\n    String body = client.get()\n            .uri(wireMockUrl + \"/ping\")\n            .retrieve()\n            .body(String.class);\n\n    assertThat(body, is(\"pong\"));\n  }\n\n  @SpringBootApplication\n  static class AppConfiguration {}\n}\n```\n\u003cbr /\u003e\n\n\u003e Mocked Static Method\n```java\nimport org.junit.jupiter.api.Test;\nimport org.mockito.MockedStatic;\nimport org.mockito.Mockito;\n\nimport static org.junit.jupiter.api.Assertions.assertEquals;\n\npublic class MyServiceTest {\n\n    @Test\n    void testStaticMethodMocking() {\n        try (MockedStatic\u003cMyStaticClass\u003e mockedStatic = Mockito.mockStatic(MyStaticClass.class)) {\n            // Configure the mock behavior\n            mockedStatic.when(MyStaticClass::staticMethod).thenReturn(\"Mocked Value\");\n\n            // Call the method that uses the static method\n            String result = MyStaticClass.staticMethod(); // or a method in your service that calls it\n\n            // Assert the result\n            assertEquals(\"Mocked Value\", result);\n\n            // Optionally, verify interactions\n            mockedStatic.verify(MyStaticClass::staticMethod);\n        }\n\n        try (MockedStatic\u003cCompletableFuture\u003e mockedStatic = Mockito.mockStatic(CompletableFuture.class)) {\n            // Configure the mock behavior\n            mockedStatic.when(() -\u003e CompletableFuture.runAsync(any(Runnable.class)))\n                .thenReturn(RuntimeException.class);\n        }\n    }\n}\n```\n\u003cbr /\u003e\n\n\u003e Mocked Construction\n```java\nimport org.junit.jupiter.api.Test;\nimport org.mockito.MockedConstruction;\nimport static org.mockito.Mockito.*;\n\nclass MyServiceTest {\n\n    @Test\n    void testMethodWithNewObjectCreation() {\n        try (MockedConstruction\u003cMyDependency\u003e mockedConstruction = mockConstruction(MyDependency.class)) {\n            // Define behavior for any instance of MyDependency created within this block\n            MyDependency mockDependency = mockedConstruction.constructed().get(0); // Get the first constructed instance\n            when(mockDependency.someMethod()).thenReturn(\"mocked result\");\n\n            MyService myService = new MyService(); // This will internally create MyDependency\n            String result = myService.performAction();\n\n            verify(mockDependency).someMethod();\n            // Assertions on 'result'\n        }\n    }\n}\n\nclass MyService {\n    public String performAction() {\n        MyDependency dependency = new MyDependency(); // This is what we are mocking\n        return dependency.someMethod();\n    }\n}\n\nclass MyDependency {\n    public String someMethod() {\n        return \"real result\";\n    }\n}\n```\n\u003cbr /\u003e\n\n### Test Containers\n\n\u003e pom.xml\n```xml\n\u003cproject\u003e\n\t\u003cdependencies\u003e\n\t\t\u003c!-- Spring Data JPA \u0026 PostgreSQL --\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003espring-boot-starter-data-jpa\u003c/artifactId\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.postgresql\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003epostgresql\u003c/artifactId\u003e\n\t\t\t\u003cscope\u003eruntime\u003c/scope\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003c!-- Testcontainers --\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.testcontainers\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003ejunit-jupiter\u003c/artifactId\u003e\n\t\t\t\u003cscope\u003etest\u003c/scope\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.testcontainers\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003epostgresql\u003c/artifactId\u003e\n\t\t\t\u003cscope\u003etest\u003c/scope\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003espring-boot-testcontainers\u003c/artifactId\u003e\n\t\t\t\u003cscope\u003etest\u003c/scope\u003e\n\t\t\u003c/dependency\u003e\n\t\u003c/dependencies\u003e\n\t\u003cdependencyManagement\u003e\n\t\t\u003cdependencies\u003e\n\t\t\t\u003c!-- Testcontainers BOM (Recommended for version alignment) --\u003e\n\t\t\t\u003cdependency\u003e\n\t\t\t\t\u003cgroupId\u003eorg.testcontainers\u003c/groupId\u003e\n\t\t\t\t\u003cartifactId\u003etestcontainers-bom\u003c/artifactId\u003e\n\t\t\t\t\u003cversion\u003e1.19.0\u003c/version\u003e \u003c!-- Use latest version --\u003e\n\t\t\t\t\u003ctype\u003epom\u003c/type\u003e\n\t\t\t\t\u003cscope\u003eimport\u003c/scope\u003e\n\t\t\t\u003c/dependency\u003e\n\t\t\u003c/dependencies\u003e\n\t\u003c/dependencyManagement\u003e\n\u003c/project\u003e\n```\n\n\u003e Code\n```java\n@Entity\n@Table(name = \"update\")\npublic class Update {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    private String status;\n}\n\n@Repository\npublic interface UpdateRepository extends JpaRepository\u003cUpdate, Long\u003e {\n    Optional\u003cUpdate\u003e findById(Long id);\n}\n\n@Service\npublic class UpdateService {\n\n\tprivate static final Logger logger = LoggerFactory.getLogger(UpdateService.class)\n    private final UpdateRepository UpdateRepository;\n\n    public UpdateService(UpdateRepository UpdateRepository) {\n        this.UpdateRepository = UpdateRepository;\n    }\n\n    public Update createUpdate(Update Update) {\n        Update savedUpdate = UpdateRepository.save(Update);\n        logger.info(\"Update {} saved to database:\", savedUpdate);\n        return savedUpdate;\n    }\n}\n```\n\n\u003e TestContainers\n```java\n@SpringBootTest\n@AutoConfigureMockMvc\n@Testcontainers\npublic class OrderControllerWithServiceConnectionIT {\n    private static final Integer TIMEOUT = 120;\n    private static final Logger logger = LoggerFactory.getLogger(OrderControllerWithServiceConnectionIT.class);\n\n    @Autowired\n    private OrderRepository orderRepository;\n\n    @Autowired\n    private OrderService orderService;\n\n    @Container\n    @ServiceConnection\n    static PostgresSQLContainer\u003c?\u003e postgres = new PostgresSQLContainer\u003c\u003e(\n        DockerImageName.parse(\"postgres:8.0\") // .asCompatibleSubstituteFor(\"mysql\")\n    );\n\n    @BeforeAll\n    static void startContainers() {\n        Awaitility.await().atMost(Duration.ofSeconds(TIMEOUT)).until(postgres::isRunning);\n        logger.info(\"PostgresSQL is up and running!\");\n    }\n\n    // Optional to @ServiceConnection, but useful for clarity\n    @DynamicPropertySource\n    static void configureProperties(DynamicPropertyRegistry registry) {\n        registry.add(\"spring.datasource.url\", postgres::getJdbcUrl);\n        registry.add(\"spring.datasource.username\", postgres::getUsername);\n        registry.add(\"spring.datasource.password\", postgres::getPassword);\n        registry.add(\"spring.datasource.driver-class-name\", postgres::getDriverClassName);\n        registry.add(\"spring.jpa.database-platform\", () -\u003e \"org.hibernate.dialect.PostgreSQLDialect\");\n    }\n\n    @Test\n    public void shouldCreateOrderAndPublishEvent() throws Exception {\n        Order order = new Order(\"DUMMY_STATUS\", \"Order from Integration Test\");\n        Order createdOrder = orderService.createOrder(order);\n        // Verify order saved in the database\n        Order savedOrder = orderRepository.findById(createdOrder.getId()).orElseThrow();\n        assertThat(savedOrder.getStatus()).isEqualTo(\"DUMMY_STATUS\");\n    }\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuzrnem%2Fnote-app-spring-boot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuzrnem%2Fnote-app-spring-boot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuzrnem%2Fnote-app-spring-boot/lists"}