Skip to content

Commit

Permalink
Merge branch 'main' into convert-unsupported-characters
Browse files Browse the repository at this point in the history
  • Loading branch information
enyia21 authored Nov 27, 2023
2 parents b3f1631 + cd165e6 commit 173a626
Show file tree
Hide file tree
Showing 12 changed files with 291 additions and 97 deletions.
248 changes: 219 additions & 29 deletions README.md

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
id 'jacoco'
id 'signing'
id 'io.github.gradle-nexus.publish-plugin' version '1.3.0'
id "org.flywaydb.flyway" version "10.0.1"
id "org.flywaydb.flyway" version "[9.+,10.0["
}

jacoco {
Expand Down Expand Up @@ -66,19 +66,19 @@ dependencies {

// This dependency is used internally, and not exposed to consumers on their own compile classpath.
api 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.integration:spring-integration-ws:6.1.4'
implementation 'org.springframework.integration:spring-integration-ws:6.2.0'
implementation 'com.google.guava:guava:32.1.3-jre'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.jetbrains:annotations:24.0.1'
implementation 'org.jetbrains:annotations:24.1.0'
implementation 'io.hypersistence:hypersistence-utils-hibernate-60:3.6.1'
implementation 'javax.persistence:javax.persistence-api:2.2'
implementation 'org.flywaydb:flyway-core:9.22.3'
implementation 'org.flywaydb:flyway-core:[9.+,10.+['
implementation 'org.webjars.npm:dropzone:5.9.3'
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.364'
implementation 'com.smartystreets.api:smartystreets-java-sdk:3.15.0'
implementation 'com.smartystreets.api:smartystreets-java-sdk:3.15.2'
implementation 'org.apache.pdfbox:pdfbox:3.0.0'
implementation 'org.yaml:snakeyaml:2.2'
implementation 'com.mailgun:mailgun-java:1.1.0'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Flow;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.yaml.snakeyaml.DumperOptions;
Expand Down Expand Up @@ -39,7 +36,6 @@ public class FlowsConfigurationFactory implements FactoryBean<List<FlowConfigura
/**
* Takes in the flow configuration yaml file from the given form-flow.path application properties and parses it into a list of
* FlowConfiguration objects.
*
* Disabled flows will be excluded, detected using the form-flow.disabled-flows application property.
* @return list of FlowConfiguration objects.
* @throws IOException if the flow configuration file can't be found.
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/formflow/library/data/UserFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import lombok.ToString;
import org.hibernate.Hibernate;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.DynamicInsert;
import org.springframework.stereotype.Component;

/**
Expand All @@ -30,6 +31,7 @@

@Entity
@Table(name = "user_files")
@DynamicInsert
@Getter
@Setter
@ToString
Expand Down
7 changes: 4 additions & 3 deletions src/main/resources/templates/fragments/honeycrisp/reveal.html
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<th:block
th:fragment="reveal"
th:with="controlId=${controlId == null ? 'r1' : controlId}"
th:with="controlId=${controlId == null ? 'r1' : controlId}, forceShowContent=${forceShowContent == null ? '' : 'force-show-content'}"
th:assert="
${!#strings.isEmpty(linkLabel)},
${!#strings.isEmpty(content)}">
<div class="reveal reveal-adjacent reveal__border">
<div class="reveal reveal-adjacent reveal__border" th:classappend="${forceShowContent}">
<a href="#" class="reveal__link reveal__link__header-adjacent" aria-expanded="false"
aria-controls="reveal-content">
<th:block th:replace="${linkLabel}"></th:block>
Expand All @@ -13,4 +13,5 @@
<th:block th:replace="${content}"/>
</div>
</div>
</th:block>

</th:block>
40 changes: 25 additions & 15 deletions src/main/resources/templates/fragments/inputs/address.html
Original file line number Diff line number Diff line change
@@ -1,32 +1,42 @@
<th:block
th:fragment="address(validate, inputName)"
th:with="
streetAddress=${inputName + T(formflow.library.inputs.AddressParts).STREET_ADDRESS_1.toString()},
streetAddress2=${inputName + T(formflow.library.inputs.AddressParts).STREET_ADDRESS_2.toString()},
city=${inputName + T(formflow.library.inputs.AddressParts).CITY.toString()},
state=${inputName + T(formflow.library.inputs.AddressParts).STATE.toString()},
zipCode=${inputName + T(formflow.library.inputs.AddressParts).ZIPCODE.toString()},
streetAddressLabelDefault=#{address.street-address-1},
streetAddress2LabelDefault=#{address.street-address-2},
cityLabelDefault=#{address.city},
stateLabelDefault=#{address.state},
zipCodeLabelDefault=#{address.zip},
streetAddressLabel=${!#strings.isEmpty(streetAddressLabel) ? streetAddressLabel : streetAddressLabelDefault},
streetAddress2Label=${!#strings.isEmpty(streetAddress2Label) ? streetAddress2Label : streetAddress2LabelDefault},
cityLabel=${!#strings.isEmpty(cityLabel) ? cityLabel : cityLabelDefault},
stateLabel=${!#strings.isEmpty(stateLabel) ? stateLabel : stateLabelDefault},
zipCodeLabel=${!#strings.isEmpty(zipCodeLabel) ? zipCodeLabel : zipCodeLabelDefault},
streetAddressInputName=${inputName + T(formflow.library.inputs.AddressParts).STREET_ADDRESS_1.toString()},
streetAddress2InputName=${inputName + T(formflow.library.inputs.AddressParts).STREET_ADDRESS_2.toString()},
cityInputName=${inputName + T(formflow.library.inputs.AddressParts).CITY.toString()},
stateInputName=${inputName + T(formflow.library.inputs.AddressParts).STATE.toString()},
zipCodeInputName=${inputName + T(formflow.library.inputs.AddressParts).ZIPCODE.toString()},
validateAddressInputName=${T(formflow.library.inputs.FieldNameMarkers).UNVALIDATED_FIELD_MARKER_VALIDATE_ADDRESS + inputName}"
>
<th:block th:replace="~{fragments/inputs/text ::
text(inputName=${streetAddress},
label=#{address.street-address-1},
text(inputName=${streetAddressInputName},
label=${streetAddressLabel},
helpText=${streetAddressHelpText})}"/>
<th:block th:replace="~{fragments/inputs/text ::
text(inputName=${streetAddress2},
label=#{address.street-address-2},
text(inputName=${streetAddress2InputName},
label=${streetAddress2Label},
helpText=${streetAddress2HelpText})}"/>
<th:block th:replace="~{fragments/inputs/text ::
text(inputName=${city},
label=#{address.city},
text(inputName=${cityInputName},
label=${cityLabel},
helpText=${cityHelpText})}"/>
<th:block th:replace="~{fragments/inputs/state ::
state(inputName=${state},
label=#{address.state},
state(inputName=${stateInputName},
label=${stateLabel},
helpText=${stateHelpText})}"/>
<th:block th:replace="~{fragments/inputs/text ::
text(inputName=${zipCode},
label=#{address.zip},
text(inputName=${zipCodeInputName},
label=${zipCodeLabel},
helpText=${zipCodeHelpText})}"/>
<input type="hidden"
th:name="${validateAddressInputName}"
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/templates/fragments/inputs/number.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
errorMessages != null &&
errorMessages.get(inputName) != null &&
(#arrays.length(errorMessages.get(inputName)) > 0) }"
th:assert="${!#strings.isEmpty(inputName)},, ${hasLabel || hasAriaLabel}">
th:assert="${!#strings.isEmpty(inputName)}, ${hasLabel || hasAriaLabel}">
<div th:class="'form-group' + ${(hasError ? ' form-group--error' : '')}">
<label th:if="${hasLabel}" th:for="${inputName}" th:text="${label}" class="form-question"/>
<p class="text--help"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<th:block
th:fragment="submitButton"
th:with="text=${text} ? ${text} : #{general.inputs.submit}, isHidden=${isHidden} ? ${isHidden}: false">
<button id="form-submit-button"
class="button button--secondary"
type="submit"
th:text="${text}"
th:classappend="${isHidden}? 'display-none'"></button>
</th:block>
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ public void setup() {
.id(UUID.randomUUID())
.urlParams(new HashMap<>())
.inputData(new HashMap<>())
.flow("testFlow")
.build();
when(submissionRepositoryService.findById(submission.getId()))
.thenReturn(Optional.of(submission));
setFlowInfoInSession(session, "testFlow", submission.getId());
setFlowInfoInSession(session, "testFlow", submission.getId());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -36,7 +35,7 @@ void shouldSaveASubmissionWithUUID() {
Submission firstSubmission = new Submission();
firstSubmission.setFlow("testFlow");

firstSubmission = submissionRepositoryService.save(firstSubmission);
firstSubmission = saveAndReload(firstSubmission);

assertThat(firstSubmission.getId()).isInstanceOf(UUID.class);
}
Expand All @@ -55,10 +54,7 @@ void shouldSaveSubmission() {
.submittedAt(Date.from(timeNow))
.build();

UUID subId = submissionRepositoryService.save(submission).getId();

Optional<Submission> savedSubmissionOptional = submissionRepositoryService.findById(subId);
Submission savedSubmission = savedSubmissionOptional.orElseThrow();
Submission savedSubmission = saveAndReload(submission);
assertThat(savedSubmission.getFlow()).isEqualTo("testFlow");
assertThat(savedSubmission.getInputData()).isEqualTo(inputData);
assertThat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(savedSubmission.getSubmittedAt()))
Expand All @@ -77,18 +73,13 @@ void shouldUpdateExistingSubmission() {
.flow("testFlow")
.submittedAt(Date.from(timeNow))
.build();
submission = submissionRepositoryService.save(submission);
Submission savedSubmission = saveAndReload(submission);

var newInputData = Map.of(
"newKey", "this is a new value",
"otherNewKey", List.of("X", "Y", "Z"));
submission.setInputData(newInputData);
submissionRepositoryService.save(submission);

Optional<Submission> savedSubmissionOptional = submissionRepositoryService.findById(
submission.getId());

Submission savedSubmission = savedSubmissionOptional.orElseThrow();
savedSubmission.setInputData(newInputData);
savedSubmission = saveAndReload(savedSubmission);
assertThat(savedSubmission.getInputData()).isEqualTo(newInputData);
}

Expand Down Expand Up @@ -145,9 +136,7 @@ void findByIdShouldReturnsDecryptedField() {
.submittedAt(Date.from(timeNow))
.build();

UUID subId = submissionRepositoryService.save(submission).getId();

Submission dbSubmission = (submissionRepositoryService.findById(subId)).get();
Submission dbSubmission = saveAndReload(submission);
assertThat(dbSubmission.getInputData().containsKey("ssnInput")).isTrue();
assertThat(dbSubmission.getInputData().containsKey("ssnInput_encrypted")).isFalse();
assertThat(dbSubmission.getInputData().get("ssnInput")).isEqualTo("123-45-6789");
Expand Down Expand Up @@ -208,15 +197,19 @@ void shouldSetCreatedAtAndUpdatedAtFields() {
.flow("testFlow")
.build();

UUID id = submissionRepositoryService.save(submission).getId();
Submission savedSubmission = submissionRepositoryService.findById(id).get();

Submission savedSubmission = saveAndReload(submission);
assertThat(savedSubmission.getCreatedAt()).isInThePast();

savedSubmission.getInputData().put("newKey", "newValue");
submissionRepositoryService.save(savedSubmission);
Submission updatedSubmission = submissionRepositoryService.findById(id).get();
Submission updatedSubmission = saveAndReload(savedSubmission);

assertThat(updatedSubmission.getUpdatedAt()).isNotNull();
assertThat(updatedSubmission.getUpdatedAt()).isInThePast();
assertThat(updatedSubmission.getUpdatedAt()).isNotEqualTo(savedSubmission.getUpdatedAt());
}

private Submission saveAndReload(Submission submission) {
Submission savedSubmission = submissionRepositoryService.save(submission);
return submissionRepositoryService.findById(savedSubmission.getId()).orElseThrow();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@
import formflow.library.data.SubmissionRepositoryService;
import formflow.library.data.UserFile;
import formflow.library.data.UserFileRepositoryService;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -24,12 +22,6 @@
@SpringBootTest(properties = {"form-flow.path=flows-config/test-flow.yaml"})
public class UserFileRepositoryServiceTests {

/*
Note: These tests are disabled because the test db doesn't work like
expected. Many of the fields are not getting their defaults set properly and so the
default value for the field tested below is not getting populated. Until it is
populated these tests will not function. Committing this code so we don't lose it.
*/
@Autowired
private UserFileRepositoryService userFileRepositoryService;
@Autowired
Expand All @@ -55,7 +47,6 @@ void setup() {
}

@Test
@Disabled
void shouldUseProperDefaultForDocTypeLabel() {
UserFile testFile = UserFile.builder()
.submission(submission)
Expand All @@ -66,13 +57,12 @@ void shouldUseProperDefaultForDocTypeLabel() {
.virusScanned(true)
.build();

UserFile savedFile = userFileRepositoryService.save(testFile);
UserFile savedFile = saveAndReload(testFile);
assertThat(savedFile.getDocTypeLabel()).isEqualTo(docTypeDefaultValue);
}

@Test
@Disabled
void shouldUserDocTypeSetInUserFileBuilderCall() {
void shouldUseDocTypeSetInUserFileBuilderCall() {
UserFile testFile = UserFile.builder()
.submission(submission)
.originalName("originalName.jpg")
Expand All @@ -83,7 +73,12 @@ void shouldUserDocTypeSetInUserFileBuilderCall() {
.docTypeLabel("BirthCertificate")
.build();

UserFile savedFile = userFileRepositoryService.save(testFile);
UserFile savedFile = saveAndReload(testFile);
assertThat(savedFile.getDocTypeLabel()).isEqualTo("BirthCertificate");
}

private UserFile saveAndReload(UserFile testFile) {
UserFile savedFile = userFileRepositoryService.save(testFile);
return userFileRepositoryService.findById(savedFile.getFileId()).orElseThrow();
}
}
3 changes: 0 additions & 3 deletions src/test/resources/application-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ spring:
messages:
encoding: ISO-8859-1
basename: messages, messages-form-flow
jpa:
hibernate:
ddl-auto: create-drop
session:
store-type: jdbc
timeout: 72h
Expand Down

0 comments on commit 173a626

Please sign in to comment.