Skip to content

Latest commit

 

History

History
63 lines (46 loc) · 1.66 KB

konform.md

File metadata and controls

63 lines (46 loc) · 1.66 KB
title slug sidebar_label
Konform Matchers
konform-matchers.html
Konform

Kotest provides various matchers for use with Konform. They can be used in your tests to assert that a given object is validated or fails validation.

To use these matchers add implementation 'io.kotest:kotest-assertions-konform-jvm:<version>' or implementation 'io.kotest:kotest-assertions-konform-js:<version> to your build.

Let's start with a basic data class:

data class UserProfile(
   val fullName: String,
   val age: Int?
)

Then given a UserProfile validator like this:

val validateUser = Validation<UserProfile> {
  UserProfile::fullName {
     minLength(4)
     maxLength(100)
  }

  UserProfile::age ifPresent {
     minimum(21)
     maximum(99)
  }
}

We can test that instances pass validation like this:

val alice = UserProfile("Alice", 25)
validateUser shouldBeValid user1

And we can test that instances fail validation with specific error messages like this:

val bob = UserProfile("bob", 18)
validateUser.shouldBeInvalid(a) {
  it.shouldContainError(UserProfile::fullName, "must have at least 4 characters")
  it.shouldContainError(UserProfile::age, "must be at least '21'")
}
Matcher Description
validation.shouldBeValid(value) Asserts that the validation is valid for the given value
validation.shouldBeInvalid(value) Asserts that the validation is invalid for the given value
validation.shouldBeInvalid(value) { block } Asserts that the validation is invalid for the given value, and then, runs the block with invalid value