Skip to content

Commit

Permalink
add producer side
Browse files Browse the repository at this point in the history
  • Loading branch information
mtszpater committed Feb 1, 2020
1 parent 81d6b34 commit 76429da
Show file tree
Hide file tree
Showing 6 changed files with 172 additions and 13 deletions.
11 changes: 11 additions & 0 deletions spring-cloud-contract-producer/pom.xml
Expand Up @@ -41,6 +41,16 @@
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>

</dependencies>

<dependencyManagement>
Expand All @@ -63,6 +73,7 @@
<version>2.2.1.RELEASE</version>
<extensions>true</extensions>
<configuration>
<baseClassForTests>dev.pater.springcloudcontractproducer.BaseTestClass</baseClassForTests>
<testFramework>JUNIT5</testFramework>
</configuration>
</plugin>
Expand Down
@@ -0,0 +1,70 @@
package dev.pater.springcloudcontractproducer;

import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/accountNumber")
public class AccountNumberRestController {

@GetMapping
public ResponseEntity<AccountNumber> get() {

return ResponseEntity.ok().body(new AccountNumber(123L));
}

@PutMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity put(@RequestBody AccountNumber accountNumber) {

if (accountNumber.getAccountNumber() < 10)
return ResponseEntity.badRequest().body(new ErrorMessage("ACCOUNT_NUMBER_INVALID", "Account number too short"));

// logic

return ResponseEntity.ok().build();
}


}


class ErrorMessage {
private String errorCode;

private String message;

public String getErrorCode() {
return errorCode;
}

public String getMessage() {
return message;
}

ErrorMessage(String errorCode, String message) {
this.errorCode = errorCode;
this.message = message;
}


}

class AccountNumber {
AccountNumber(long accountNumber) {
this.accountNumber = accountNumber;
}

public long getAccountNumber() {
return accountNumber;
}

public AccountNumber() {
}

public void setAccountNumber(long accountNumber) {
this.accountNumber = accountNumber;
}

private long accountNumber;
}
@@ -0,0 +1,21 @@
package dev.pater.springcloudcontractproducer;

import io.restassured.module.mockmvc.RestAssuredMockMvc;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public abstract class BaseTestClass {

@InjectMocks
AccountNumberRestController accountNumberRestController;

@BeforeEach
public void setUp() {
RestAssuredMockMvc.standaloneSetup(this.accountNumberRestController);

}

}

This file was deleted.

@@ -0,0 +1,37 @@
package contracts.accountNumber

import org.springframework.cloud.contract.spec.Contract;

Contract.make {
description("""
User want to update his account number and passes invalid number
```
given:
any client and too short account number
when:
he want to update his account number
then:
we'll send him error message
```
""")
request {
method 'PUT'
url '/accountNumber'
body(
accountNumber: $(regex('[0-9]{1}'))
)
headers {
contentType(applicationJson())
}
}
response {
status BAD_REQUEST()
body([
errorCode: "ACCOUNT_NUMBER_INVALID",
message: anyNonEmptyString()
])
headers {
contentType(applicationJson())
}
}
}
@@ -0,0 +1,33 @@
package contracts.accountNumber

import org.springframework.cloud.contract.spec.Contract;

Contract.make {
description("""
User asks for his account number
```
given:
any client
when:
he asks for account number
then:
we'll send him back his account number
```
""")
request {
method 'GET'
url '/accountNumber'
headers {
contentType(applicationJson())
}
}
response {
status 200
body(
accountNumber: anyNumber()
)
headers {
contentType(applicationJson())
}
}
}

0 comments on commit 76429da

Please sign in to comment.