Skip to content

Commit

Permalink
x1174 Allow certain characters in replicate number
Browse files Browse the repository at this point in the history
Can contain _-. (underscore, hyphen, full stop) in addition to
letters and digits.
Must start and end with a letter or digit.
Cannot have two adjacent punctuation characters.
  • Loading branch information
khelwood committed Mar 8, 2024
1 parent 50ea50f commit 17e8520
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ public Validator<String> externalBarcodeValidator() {

@Bean
public Validator<String> replicateValidator() {
Set<CharacterType> charTypes = EnumSet.of(CharacterType.ALPHA, CharacterType.DIGIT);
return new StringValidator("Replicate number", 1, 7, charTypes);
Set<CharacterType> charTypes = EnumSet.of(CharacterType.ALPHA, CharacterType.DIGIT,
CharacterType.UNDERSCORE, CharacterType.FULL_STOP, CharacterType.HYPHEN);
Pattern pattern = Pattern.compile("[0-9a-z]([-_.]?[0-9a-z])*", Pattern.CASE_INSENSITIVE);
return new StringValidator("Replicate number", 1, 8, charTypes, false, pattern);
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package uk.ac.sanger.sccp.stan.config;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import uk.ac.sanger.sccp.stan.service.Validator;

import java.util.function.Consumer;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

class TestFieldValidation {
FieldValidation fieldValidation;

@BeforeEach
void setup() {
fieldValidation = new FieldValidation();
}

@Test
public void testReplicateNumber() {
Validator<String> val = fieldValidation.replicateValidator();
final Consumer<String> problemConsumer = msg -> {};
String[] valid = {"1", "A", "1A", "A1", "11aabb33", "1-4-A", "B.5.C", "X_X_7_7", "1-B.C_E"};
for (String string : valid) {
assertTrue(val.validate(string, problemConsumer), string);
}
String[] invalid = {"", "*", "A*", " 1", "A ", "-1", "A.", "1A..N", "A-_4"};
for (String string : invalid) {
assertFalse(val.validate(string, problemConsumer), string);
}
}

}

1 comment on commit 17e8520

@sabrine33
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

Please sign in to comment.