Skip to content

Commit

Permalink
Task 28 : Add Spring Open Api with its test and Revise README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Rapter1990 committed Jul 10, 2024
1 parent dbc575c commit 795e7ba
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@
- Docker Compose
- CI/CD (Github Actions)
- Postman
- Spring Boot Open Api


### Postman
Expand All @@ -148,6 +149,11 @@
Import postman collection under postman_collection folder
```

### Open Api

```
http://localhost:1225/swagger-ui/index.html
```

### Prerequisites

Expand Down
14 changes: 14 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
<jsonwebtoken.version>0.12.3</jsonwebtoken.version>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
<openapi.version>2.1.0</openapi.version>
<springdoc-openapi.version>2.1.0</springdoc-openapi.version>
</properties>
<dependencies>

Expand Down Expand Up @@ -160,6 +162,18 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${openapi.version}</version>
</dependency>

<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>

</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ public SecurityFilterChain filterChain(
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(customizer -> customizer
.requestMatchers(HttpMethod.POST, "/api/v1/authentication/**").permitAll()
.requestMatchers(
"/swagger-ui/**",
"/swagger-ui.html",
"/v2/api-docs/**",
"/v3/api-docs/**"
).permitAll()
.anyRequest().authenticated()
)
.sessionManagement(customizer -> customizer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.security.rolepermissionexample.common.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.security.SecurityScheme;

/**
* Configuration class named {@link OpenApiConfig} for OpenAPI documentation.
*/
@OpenAPIDefinition(
info = @Info(
contact = @Contact(
name = "Sercan Noyan Germiyanoğlu",
url = "https://github.com/Rapter1990/parkinglot/"
),
description = "Case Study - Role Permission Through Spring Security in Spring Boot" +
"(Spring Boot, Spring Security , Mysql, JUnit, Integration Test, Docker, Test Container, Github Actions, Postman) ",
title = "rolepermissionexample",
version = "1.0.0"
)
)
@SecurityScheme(
name = "bearerAuth",
description = "JWT Token",
scheme = "bearer",
type = SecuritySchemeType.HTTP,
bearerFormat = "JWT",
in = SecuritySchemeIn.HEADER
)
public class OpenApiConfig {

}
7 changes: 7 additions & 0 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,10 @@ spring:
sql:
init:
mode: always


# SWAGGER
springdoc:
api-docs:
enabled: true
show-actuator: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.security.rolepermissionexample.common.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class OpenApiConfigTest {

@Test
void openApiInfo() {

// Given
OpenAPIDefinition openAPIDefinition = OpenApiConfig.class.getAnnotation(OpenAPIDefinition.class);

// Then
assertEquals("1.0.0", openAPIDefinition.info().version());
assertEquals("rolepermissionexample", openAPIDefinition.info().title());
assertEquals("Case Study - Role Permission Through Spring Security in Spring Boot" +
"(Spring Boot, Spring Security , Mysql, JUnit, Integration Test, Docker, Test Container, Github Actions, Postman) ",
openAPIDefinition.info().description());

}

@Test
void securityScheme() {

// Given
SecurityScheme securityScheme = OpenApiConfig.class.getAnnotation(SecurityScheme.class);

// Then
assertEquals("bearerAuth", securityScheme.name());
assertEquals("JWT Token", securityScheme.description());
assertEquals("bearer", securityScheme.scheme());
assertEquals(SecuritySchemeType.HTTP, securityScheme.type());
assertEquals("JWT", securityScheme.bearerFormat());
assertEquals(SecuritySchemeIn.HEADER, securityScheme.in());

}

@Test
void contactInfo() {

// Given
Info info = OpenApiConfig.class.getAnnotation(OpenAPIDefinition.class).info();
Contact contact = info.contact();

// Then
assertEquals("Sercan Noyan Germiyanoğlu", contact.name());
assertEquals("https://github.com/Rapter1990/parkinglot/", contact.url());

}

}

0 comments on commit 795e7ba

Please sign in to comment.