Skip to content

Commit

Permalink
Merge pull request #324 from georgejecook/validator-updates
Browse files Browse the repository at this point in the history
input validator updates, fixed failing tests
  • Loading branch information
georgejecook authored Mar 2, 2023
2 parents d58c144 + 7925ab9 commit caed45c
Show file tree
Hide file tree
Showing 6 changed files with 290 additions and 50 deletions.
1 change: 0 additions & 1 deletion src/source/core/Request.spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import "pkg:/source/tests/BaseTestSuite.spec.bs"
import "pkg:/source/core/Request.bs"

namespace tests
@only
@suite("Request tests")
class RequestTests extends tests.BaseTestSuite

Expand Down
5 changes: 2 additions & 3 deletions src/source/mx/BaseViewModel.spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import "pkg:/source/rooibos/Utils.bs"
import "pkg:/source/mx/BaseViewModel.bs"

namespace tests

@suite("BaseViewModel tests")
class BaseViewModelTests extends mv.tests.BaseTestSuite

Expand Down Expand Up @@ -38,8 +37,8 @@ namespace tests
}
task = m.vm.createTask("mc_RequestTask", args, m.vm.cancelWaitTimer, false, "none")
m.assertSubType(task, "mc_RequestTask")
m.assertEqual(task.v1, "a")
m.assertEqual(task.v2, "b")
m.assertEqual(task.args.v1, "a")
m.assertEqual(task.args.v2, "b")
end function

end class
Expand Down
4 changes: 2 additions & 2 deletions src/source/view/NodeClass.spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ namespace tests
}
task = m.nc.createTask("mc_RequestTask", args, m.nc.cancelWaitTimer, false, "none")
m.assertSubType(task, "mc_RequestTask")
m.assertEqual(task.v1, "a")
m.assertEqual(task.v2, "b")
m.assertEqual(task.args.v1, "a")
m.assertEqual(task.args.v2, "b")
end function

end class
Expand Down
166 changes: 153 additions & 13 deletions src/source/view/ValidationUtils.spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,172 @@ namespace tests
class ValidationUtilsTests extends mv.tests.BaseTestSuite

private validator
protected override function beforeEach()
super.beforeEach()
m.validator = new mv.input.validators.InputValidator()
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("tests constructor")
' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("initializes")
function _()
m.validator = new mv.controls.InputValidator()
m.assertEqual(m.validator.validationData, { hasError: false, errorMessage: "" })
m.assertEqual(m.validator.__className, "mv.input.validators.InputValidator")

m.validator = new mv.input.validators.InputValidator()

m.assertTrue(mc.isFunction(m.validator.validatorTypeMap[mv.input.validators.Type.alphaNumeric]))
m.assertTrue(mc.isFunction(m.validator.validatorTypeMap[mv.input.validators.Type.numeric]))
m.assertTrue(mc.isFunction(m.validator.validatorTypeMap[mv.input.validators.Type.zipcode]))
m.assertTrue(mc.isFunction(m.validator.validatorTypeMap[mv.input.validators.Type.email]))
m.assertTrue(mc.isFunction(m.validator.validatorTypeMap[mv.input.validators.Type.required]))
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("tests validate")
@describe("validate")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("checks returned data")
@params("numeric", "12345", { hasError: false, errorMessage: "" })
@params("numeric", "1234567", { hasError: true, errorMessage: "Invalid.Must contain 5 digits." })
@params("numeric", "1111L", { hasError: true, errorMessage: "Invalid.Must contain 5 digits." })
@params("email", "invalidemail.com", { hasError: true, errorMessage: "Invalid email address." })
@params("email", "[email protected]", { hasError: false, errorMessage: "" })
@params("", "12345", { hasError: false, errorMessage: "" })
@params("", "abc", { hasError: false, errorMessage: "" })
function _(validatorType, value, expected)
@it("returns default validation data when no validator is found, or validator type is not valid")
@params(invalid)
@params([])
@params(123)
@params("other")
function _(validatorType)
m.validator.validate(validatorType, "abc")
m.assertEqual(m.validator.validate(validatorType, "abc"), { hasError: false, errorMessage: "" })
end function

@it("it uses the correct validator")
@params("alphaNumeric")
@params("numeric")
@params("required")
@params("email")
@params("zipcode")
function _(validatorType)
value = "abc"
message = ""

m.expectCalled(m.validator.validateByType(validatorType, value, message))

m.validator.validate(validatorType, value)
m.assertEqual(m.validator.validationData, expected)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("validateByType")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("validates the value using the correct validator")
@params("email", "test@emailcom", "Invalid email address.")
@params("numeric", "abc", "Must contain only numbers.")
@params("required", "", "Required.")
function _(validatorType, value, expectedMessage)
result = m.validator.validateByType(validatorType, value)

m.assertEqual(result.errorMessage, expectedMessage)
m.assertEqual(result.hasError, true)
end function

@it("validates the value using the correct validator and replaces default message with custom message")
@params("numeric", "abc", "Only numbers.")
@params("email", "test@emailcom", "Invalid email")
@params("required", "", "Field is required.")
function _(validatorType, value, customMessage)
result = m.validator.validateByType(validatorType, value, customMessage)

m.assertEqual(result.errorMessage, customMessage)
m.assertEqual(result.hasError, true)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("validateAlphaNumeric")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("returns object with hasError set to false when value is alpha numeric, true otherwise")
@params("abc123", false, "")
@params("abc", false, "")
@params("123", false, "")
@params("abc123!", true, "Must contain only alpha numeric characters.")
@params("a&$%b", true, "Must contain only alpha numeric characters.")
function _(value, expected, message)
result = m.validator.validateAlphaNumeric(value)

m.assertEqual(result.hasError, expected)
m.assertEqual(result.errorMessage, message)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("validateNumeric")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("returns object with hasError set to false when value is numeric, true otherwise")
@params("abc123", true, "Must contain only numbers.")
@params("abc", true, "Must contain only numbers.")
@params("123", false, "")
@params("a&$%b", true, "Must contain only numbers.")
function _(value, expected, message)
result = m.validator.validateNumeric(value)

m.assertEqual(result.hasError, expected)
m.assertEqual(result.errorMessage, message)
end function

@it("returns object with hasError set to false when value is numeric and value length is equal to exactLength, true otherwise")
@params("123", 3, false, "")
@params("123", 2, true, "Must be 2 digits long.")
function _(value, exactLength, expected, message)
result = m.validator.validateNumeric(value, exactLength)

m.assertEqual(result.hasError, expected)
m.assertEqual(result.errorMessage, message)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("validateZipCode")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("returns object with hasError set to false if valid zipcode, true otherwise")
@params("12345", false, "")
@params("123", true, "Must be 5 digits long.")
@params("123456", true, "Must be 5 digits long.")
@params("a&$%b", true, "Must be 5 digits long.")
@params("abcde", true, "Must be 5 digits long.")
function _(value, expected, message)
result = m.validator.validateZipCode(value)

m.assertEqual(result.hasError, expected)
m.assertEqual(result.errorMessage, message)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("validateRequired")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("returns object with hasError set to false if value is not empty, true otherwise")
@params("abc", false, "")
@params("", true, "Required.")
function _(value, expected, message)
result = m.validator.validateRequired(value)

m.assertEqual(result.hasError, expected)
m.assertEqual(result.errorMessage, message)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@describe("validateEmail")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@it("returns object with hasError set to false if value is valid email address, true otherwise")
@params("aaa", true, "Invalid email address.")
@params("aaa@bbb", true, "Invalid email address.")
@params("aaa@bbb.", true, "Invalid email address.")
@params("[email protected]", false, "")
function _(value, expected, message)
result = m.validator.validateEmail(value)

m.assertEqual(result.hasError, expected)
m.assertEqual(result.errorMessage, message)
end function

end class
end namespace
37 changes: 31 additions & 6 deletions src/source/view/controls/ControlsGroup.spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ namespace tests

end function

@it("sets controls isSelected to true, if the control is not disabled")
@it("sets controls isSelected to true, if the control is not disabled and setIsSelectedOnChildren is true")
@params(false, true)
@params(true, invalid)
@params(invalid, true)
Expand All @@ -172,6 +172,7 @@ namespace tests
"id": "c1"
isDisabled: disabled
}
m.control.setIsSelectedOnChildren = true

m.control.selectedIndex = -1
m.control.focusedIndex = 0
Expand All @@ -182,7 +183,30 @@ namespace tests

m.assertEqual(c1.selected, expectedIsSelected)
m.assertEqual(selectedControl.isSelected, expectedIsSelected)
end function

@it("doesn't set controls isSelected to true, if setIsSelectedOnChildren is false")
@params(false)
@params(true)
@params(invalid)
function _(disabled)
c1 = {
"id": "c1"
isDisabled: disabled
selected: false
isSelected: false
}
m.control.setIsSelectedOnChildren = false

m.control.selectedIndex = -1
m.control.focusedIndex = 0
m.control.visibleChildren = [c1]

m.assertTrue(m.control.onKeyPressOK())
selectedControl = m.control.visibleChildren[0]

m.assertFalse(c1.selected)
m.assertFalse(selectedControl.isSelected)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Expand Down Expand Up @@ -210,7 +234,7 @@ namespace tests
m.control.setFocusedControl(control)

m.assertEqual(m.control.focusedIndex, -1)
m.assertInvalid(m.control.focusedControl)
m.assertInvalid(m.control._focusedControl)
end function

@it("sets focused control if control is found in original children")
Expand All @@ -225,7 +249,7 @@ namespace tests
m.control.setFocusedControl(control)

m.assertEqual(m.control.focusedIndex, 0)
m.assertTrue(m.control.focusedControl.isSameNode(control))
m.assertEqual(m.control._focusedControl, control)
end function

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Expand All @@ -235,11 +259,12 @@ namespace tests
@it("returns true if control is focused or not")
@params(true)
@params(false)
function _(isControlFocused)
function _(isSameNode)
control = { "id": "control" }
m.control._focusedControl = control

m.expectCalled(m.control.isControlFocused(control), isControlFocused)
m.assertEqual(m.control.getIsFocusedControl(control), isControlFocused)
m.expectCalled(m.control._focusedControl.isSameNode(control), isSameNode)
m.assertEqual(m.control.getIsFocusedControl(control), isSameNode)
end function

end class
Expand Down
Loading

0 comments on commit caed45c

Please sign in to comment.