Skip to content
Snippets Groups Projects
Commit facd4c20 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-3778: Formcycle Vorgangsnummer' (#65) from...

Merge pull request 'OZG-3778: Formcycle Vorgangsnummer' (#65) from OZG-3778-Formcycle-Vorgangsnummer into master

Reviewed-on: https://git.ozg-sh.de/mgm/intelliform-adapter/pulls/65
parents 632bc405 fe9309b1
Branches
Tags
No related merge requests found
......@@ -65,6 +65,7 @@ class FormDataController {
private final FormCycleFormDataMapper mapper;
private final SemantikAdapter semantikAdapter;
private final VorgangNummerSupplier vorgangNummerSupplier;
@PostMapping(consumes = "multipart/form-data", produces = "application/protobuf")
public FormCycleConfirmationResponse receiveFormData(@RequestPart FormCycleFormData formData,
......@@ -78,7 +79,7 @@ class FormDataController {
semantikAdapter.processFormData(mappedFormData);
return FormCycleConfirmationResponse.newBuilder().setVorgangNummer("TODO FILL ME").build();
return FormCycleConfirmationResponse.newBuilder().setVorgangNummer(vorgangNummerSupplier.get()).build();
}
private FormData addRepresentations(Optional<Collection<MultipartFile>> files, FormData mappedFormData) {
......
package de.itvsh.kop.eingang.formcycle;
import java.time.Instant;
import java.time.LocalDate;
import org.springframework.stereotype.Component;
@Component
class VorgangNummerSupplier {
static final String BASE30_ALPHABET = "23456789ABCDEFGHJKMNPQRSTVWXYZ";
static final int SUFFIX_LENGTH = 6;
public String get() {
var resultBuilder = initWithPrefix();
long currentTimeSeconds = Instant.now().toEpochMilli();
for (int i = 0; i < SUFFIX_LENGTH; i++) {
resultBuilder.append(BASE30_ALPHABET.charAt((int) currentTimeSeconds % 30));
currentTimeSeconds /= 30;
}
return resultBuilder.toString();
}
StringBuilder initWithPrefix() {
var today = LocalDate.now();
var lastYearNumber = today.getYear() % 10;
var monthValue = "%02d".formatted(today.getMonthValue());
var dayValue = "%02d".formatted(today.getDayOfMonth());
return new StringBuilder().append(lastYearNumber).append(monthValue).append(dayValue).append("-");
}
}
......@@ -68,6 +68,8 @@ class FormDataControllerTest {
private FormCycleFormDataMapper mapper;
@Mock
private SemantikAdapter semantikAdapter;
@Mock
private VorgangNummerSupplier vorgangNummerSupplier;
private MockMvc mockMvc;
......@@ -81,6 +83,8 @@ class FormDataControllerTest {
@Nested
class ReceiveFormData {
static final String VORGANG_NUMMER = "VorgangNummer";
private FormData mappedFormData = FormDataTestFactory.create();
@Captor
......@@ -89,6 +93,7 @@ class FormDataControllerTest {
@BeforeEach
void init() {
when(mapper.toFormData(any())).thenReturn(mappedFormData);
when(vorgangNummerSupplier.get()).thenReturn(VORGANG_NUMMER);
}
@Test
......@@ -96,13 +101,22 @@ class FormDataControllerTest {
doPostRequest().andExpect(status().is2xxSuccessful());
}
@Test
void shouldCallVorgangNummerSupplier() {
doPostRequest();
verify(vorgangNummerSupplier).get();
}
@Test
@SneakyThrows
void shouldRespondeWithVorgangNummer() {
var confirmation = FormCycleConfirmationResponse.parseFrom(
doPostRequest().andReturn().getResponse().getContentAsByteArray());
assertThat(confirmation.getVorgangNummer()).isEqualTo("TODO FILL ME");
assertThat(confirmation.getVorgangNummer()).isEqualTo(VORGANG_NUMMER);
}
@Test
......
package de.itvsh.kop.eingang.formcycle;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.time.LocalDate;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.Spy;
class VorgangNummerSupplierTest {
@Spy
private VorgangNummerSupplier vorgangNummerSupplier = new VorgangNummerSupplier();
@Nested
@DisplayName("Get Vorgang Nummer")
class TestGetVorgangNummer {
@Test
void shouldCallAddPrefix() {
vorgangNummerSupplier.get();
verify(vorgangNummerSupplier).initWithPrefix();
}
@Test
@DisplayName("should add random suffix of length 6")
void shouldAddSuffix() {
doReturn(new StringBuilder()).when(vorgangNummerSupplier).initWithPrefix();
var result = vorgangNummerSupplier.get();
assertThat(result).hasSize(6);
}
}
@Nested
class TestAddPrefix{
@Test
void shouldHaveSize(){
var resultBuilder = vorgangNummerSupplier.initWithPrefix();
assertThat(resultBuilder).hasSize(6);
}
@Test
void shouldAddLastYearNumberFirst(){
var lastYearNumber = "" + LocalDate.now().getYear() % 10;
var resultBuilder = vorgangNummerSupplier.initWithPrefix();
assertThat(resultBuilder.substring(0,1)).isEqualTo(lastYearNumber);
}
@Test
void shouldAddMonthValueSecond(){
var monthValue = "%02d".formatted(LocalDate.now().getMonthValue());
var resultBuilder = vorgangNummerSupplier.initWithPrefix();
assertThat(resultBuilder.substring(1, 3)).isEqualTo(monthValue);
}
@Test
void shouldAddDayValueThird(){
var dayValue = "%02d".formatted(LocalDate.now().getDayOfMonth());
var resultBuilder = vorgangNummerSupplier.initWithPrefix();
assertThat(resultBuilder.substring(3, 5)).isEqualTo(dayValue);
}
@Test
void shouldAddHyphenAtEnd(){
var resultBuilder = vorgangNummerSupplier.initWithPrefix();
assertThat(resultBuilder.charAt(5)).isEqualTo('-');
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment