Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion server/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
apacheCommonsVersion=4.4

assertjVersion=3.26.0
archUnitVersion=1.3.0

hamcrestVersion=2.2

jakartaAnnotationVersion=3.0.0
jakartaInjectVersion=2.0.1

junitJupiterVersion=5.10.2

kotlinVersion=2.0.0

lombokPluginVersion=8.6
lombokVersion=1.18.32

mockitoVersion=5.12.0

springBootVersion=3.3.0
springDependencyManagementVersion=1.1.5
18 changes: 18 additions & 0 deletions server/loans/core/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
import static org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17

plugins {
id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}"
}

group = 'ee.rsx.kata.bank'
version = '1.0.0-SNAPSHOT'

dependencies {
implementation project(":loans-api")
}

compileKotlin {
compilerOptions {
jvmTarget = JVM_17
}
}

compileTestKotlin {
compilerOptions {
jvmTarget = JVM_17
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ee.rsx.kata.bank.loans.usecases

import ee.rsx.kata.bank.loans.domain.limits.LoanLimitsConfig
import ee.rsx.kata.bank.loans.domain.limits.gateway.LoanConfigGateway
import ee.rsx.kata.bank.loans.validation.limits.LoadValidationLimits
import ee.rsx.kata.bank.loans.validation.limits.ValidationLimitsDTO
import jakarta.inject.Named

@Named
internal class ProvideLoanConfiguration(
private val gateway: LoanConfigGateway
) : LoadValidationLimits {

override fun invoke() = gateway.loadLimits().toDto()

private fun LoanLimitsConfig.toDto() =
ValidationLimitsDTO(
minimumLoanAmount,
maximumLoanAmount,
minimumLoanPeriodMonths,
maximumLoanPeriodMonths
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package ee.rsx.kata.bank.loans.usecases

import ee.rsx.kata.bank.loans.domain.ssn.SocialSecurityNumber
import ee.rsx.kata.bank.loans.validation.ssn.SsnValidationResultDTO
import ee.rsx.kata.bank.loans.validation.ssn.SsnValidationResultDTO.invalidResultWith
import ee.rsx.kata.bank.loans.validation.ssn.SsnValidationResultDTO.okResultWith
import ee.rsx.kata.bank.loans.validation.ssn.ValidateSocialSecurityNumber
import jakarta.inject.Named
import java.lang.RuntimeException
import java.time.format.DateTimeParseException

@Named
internal class SsnValidation : ValidateSocialSecurityNumber {

override fun on(ssn: String): SsnValidationResultDTO =
try {
val validSsn = SocialSecurityNumber(ssn)
okResultWith(validSsn.value)
} catch (e: RuntimeException) {
when (e) {
is IllegalArgumentException,
is IllegalStateException,
is DateTimeParseException -> invalidResultWith(ssn)
else -> throw e
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package ee.rsx.kata.bank.loans.usecases

import ee.rsx.kata.bank.loans.validation.ssn.SsnValidationResultDTO
import ee.rsx.kata.bank.loans.validation.ssn.ValidationStatus.INVALID
import ee.rsx.kata.bank.loans.validation.ssn.ValidationStatus.OK
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test

@DisplayName("SSN Validation")
internal class SsnValidationTest {

private lateinit var ssnValidation: SsnValidation

@BeforeEach
fun setup() {
ssnValidation = SsnValidation()
}

@Test
fun `result is OK, for a given valid SSN value`() {
val validSsnValue = "50212104262"

val result = ssnValidation.on(validSsnValue)

assertThat(result).isEqualTo(
SsnValidationResultDTO(validSsnValue, OK)
)
}

@Nested
@DisplayName("result is INVALID, for a given SSN value")
internal inner class ResultIsInvalidForAGivenSsnValue {

@Test
fun `having invalid date`() {
val invalidDate = "021310"
val invalidSsnValue = "5${invalidDate}4262"

val result = ssnValidation.on(invalidSsnValue)

assertThat(result).isEqualTo(
expectedInvalidResultFor(invalidSsnValue)
)
}

@Test
fun `having invalid checksum`() {
val invalidChecksum = "3"
val invalidSsnValue = "5021210426${invalidChecksum}"

val result = ssnValidation.on(invalidSsnValue)

assertThat(result).isEqualTo(
expectedInvalidResultFor(invalidSsnValue)
)
}

@Test
fun `having invalid century prefix`() {
val invalidCenturyPrefix = "7"
val invalidSsnValue = "${invalidCenturyPrefix}0212104262"

val result = ssnValidation.on(invalidSsnValue)

assertThat(result).isEqualTo(
expectedInvalidResultFor(invalidSsnValue)
)
}
}

companion object {
private fun expectedInvalidResultFor(invalidSsnValue: String) =
SsnValidationResultDTO(invalidSsnValue, INVALID)
}
}
18 changes: 18 additions & 0 deletions server/loans/gw-eligibility/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
import static org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17

plugins {
id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}"
}

group = 'ee.rsx.kata.bank'
version = '1.0.0-SNAPSHOT'

dependencies {
implementation project(":loans-core")
}

compileKotlin {
compilerOptions {
jvmTarget = JVM_17
}
}

compileTestKotlin {
compilerOptions {
jvmTarget = JVM_17
}
}

This file was deleted.

Loading