diff --git a/app/src/main/java/com/aria/refactortechniques/MainActivity.kt b/app/src/main/java/com/aria/refactortechniques/MainActivity.kt index 8782011..93e5946 100644 --- a/app/src/main/java/com/aria/refactortechniques/MainActivity.kt +++ b/app/src/main/java/com/aria/refactortechniques/MainActivity.kt @@ -1,7 +1,7 @@ package com.aria.refactortechniques -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { diff --git a/app/src/main/java/com/aria/refactortechniques/scenario/Coupon.kt b/app/src/main/java/com/aria/refactortechniques/scenario/Coupon.kt new file mode 100644 index 0000000..17af91d --- /dev/null +++ b/app/src/main/java/com/aria/refactortechniques/scenario/Coupon.kt @@ -0,0 +1,6 @@ +package com.aria.refactortechniques.scenario + +data class Coupon( + val title: String = "Title", + val duration: Int = 100 +) diff --git a/app/src/main/java/com/aria/refactortechniques/scenario/CouponPresenter.kt b/app/src/main/java/com/aria/refactortechniques/scenario/CouponPresenter.kt new file mode 100644 index 0000000..b1d9109 --- /dev/null +++ b/app/src/main/java/com/aria/refactortechniques/scenario/CouponPresenter.kt @@ -0,0 +1,8 @@ +package com.aria.refactortechniques.scenario + +class CouponPresenter(val couponValidatorUseCase: CouponValidatorUseCase) { + + fun setup(coupon: Coupon) { + couponValidatorUseCase.validate(coupon) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aria/refactortechniques/scenario/CouponValidatorUseCase.kt b/app/src/main/java/com/aria/refactortechniques/scenario/CouponValidatorUseCase.kt new file mode 100644 index 0000000..de5eb65 --- /dev/null +++ b/app/src/main/java/com/aria/refactortechniques/scenario/CouponValidatorUseCase.kt @@ -0,0 +1,8 @@ +package com.aria.refactortechniques.scenario + +const val MAX_TITLE_LENGTH = 100 + +class CouponValidatorUseCase { + + fun validate(coupon: Coupon) = coupon.title.length < MAX_TITLE_LENGTH +} \ No newline at end of file diff --git a/app/src/main/java/com/aria/refactortechniques/solution/CouponPresenterSolution.kt b/app/src/main/java/com/aria/refactortechniques/solution/CouponPresenterSolution.kt new file mode 100644 index 0000000..75afffd --- /dev/null +++ b/app/src/main/java/com/aria/refactortechniques/solution/CouponPresenterSolution.kt @@ -0,0 +1,12 @@ +package com.aria.refactortechniques.solution + +import com.aria.refactortechniques.scenario.Coupon + +class CouponPresenterSolution( + private val couponValidatorUseCaseSolution: CouponValidatorUseCaseSolution +) { + + fun setup(coupon: Coupon) { + couponValidatorUseCaseSolution.validate(coupon) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aria/refactortechniques/solution/CouponValidatorUseCaseSolution.kt b/app/src/main/java/com/aria/refactortechniques/solution/CouponValidatorUseCaseSolution.kt new file mode 100644 index 0000000..422f851 --- /dev/null +++ b/app/src/main/java/com/aria/refactortechniques/solution/CouponValidatorUseCaseSolution.kt @@ -0,0 +1,15 @@ +package com.aria.refactortechniques.solution + +import com.aria.refactortechniques.scenario.Coupon +import com.aria.refactortechniques.scenario.MAX_TITLE_LENGTH + +class CouponValidatorUseCaseSolution { + + fun validate(coupon: Coupon): Boolean { + return validateCoupon(coupon) + } + + companion object { + fun validateCoupon(coupon: Coupon) = coupon.title.length < MAX_TITLE_LENGTH + } +} \ No newline at end of file diff --git a/app/src/test/java/com/aria/refactortechniques/CouponValidatorUseCaseTest.kt b/app/src/test/java/com/aria/refactortechniques/CouponValidatorUseCaseTest.kt new file mode 100644 index 0000000..2dcac5e --- /dev/null +++ b/app/src/test/java/com/aria/refactortechniques/CouponValidatorUseCaseTest.kt @@ -0,0 +1,34 @@ +package com.aria.refactortechniques + +import com.aria.refactortechniques.scenario.Coupon +import com.aria.refactortechniques.solution.CouponPresenterSolution +import com.aria.refactortechniques.solution.CouponValidatorUseCaseSolution +import com.nhaarman.mockitokotlin2.given +import org.junit.Before +import org.junit.Test + +class CouponValidatorUseCaseSolutionTest { + + private lateinit var sut: CouponPresenterSolution + private lateinit var couponValidatorUseCaseSolution: CouponValidatorUseCaseSolution + + @Before + fun setup() { + sut = CouponPresenterSolution(couponValidatorUseCaseSolution) + } + + @Test + fun `given valid coupon should validate it properly`() { + couponValidatorUseCaseSolution.validate(givenAnyCoupon()) + } + + @Test + fun `given Valid Coupon`() { + given(CouponValidatorUseCaseSolution.validateCoupon(givenAnyCoupon())) + .willReturn(true) + } + + fun givenAnyCoupon(): Coupon { + return Coupon("Any", 100) + } +} \ No newline at end of file diff --git a/app/src/test/java/com/aria/refactortechniques/ExampleUnitTest.kt b/app/src/test/java/com/aria/refactortechniques/ExampleUnitTest.kt deleted file mode 100644 index 3e71b77..0000000 --- a/app/src/test/java/com/aria/refactortechniques/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.aria.refactortechniques - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -}