diff --git a/src/main/java/uk/ac/sanger/sccp/stan/config/FieldValidation.java b/src/main/java/uk/ac/sanger/sccp/stan/config/FieldValidation.java index c1a8b769b..0e98fd3c2 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/config/FieldValidation.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/config/FieldValidation.java @@ -19,6 +19,12 @@ */ @Configuration public class FieldValidation { + @Bean + public Validator sectionValidator() { + Set charTypes = EnumSet.of(CharacterType.ALPHA, CharacterType.DIGIT); + return new StringValidator("Section", 1, 16, charTypes, false, Pattern.compile("[1-9][0-9]*[a-z]*", Pattern.CASE_INSENSITIVE)); + } + @Bean public Validator cellClassValidator() { Set charTypes = EnumSet.of( diff --git a/src/main/java/uk/ac/sanger/sccp/stan/model/CytassistOverview.java b/src/main/java/uk/ac/sanger/sccp/stan/model/CytassistOverview.java index ea3282c58..8c07af26a 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/model/CytassistOverview.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/model/CytassistOverview.java @@ -15,7 +15,7 @@ public class CytassistOverview { private Integer id; private String workNumber; private Integer sampleId; - private Integer section; + private String section; private String sourceBarcode; private String sourceSlotAddress; private String sourceLabwareType; @@ -73,11 +73,11 @@ public void setSampleId(Integer sampleId) { this.sampleId = sampleId; } - public Integer getSection() { + public String getSection() { return this.section; } - public void setSection(Integer section) { + public void setSection(String section) { this.section = section; } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/model/PlanAction.java b/src/main/java/uk/ac/sanger/sccp/stan/model/PlanAction.java index 354281205..a1b799595 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/model/PlanAction.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/model/PlanAction.java @@ -1,10 +1,10 @@ package uk.ac.sanger.sccp.stan.model; -import com.google.common.base.MoreObjects; - import javax.persistence.*; import java.util.Objects; +import static uk.ac.sanger.sccp.utils.BasicUtils.describe; + /** * A planned action inside a planned operation. * @author dr6 @@ -26,7 +26,7 @@ public class PlanAction { private Slot destination; @ManyToOne private Sample sample; - private Integer newSection; + private String newSection; private String sampleThickness; @ManyToOne private BioState newBioState; @@ -38,7 +38,7 @@ public PlanAction(Integer id, Integer planOperationId, Slot source, Slot destina } public PlanAction(Integer id, Integer planOperationId, Slot source, Slot destination, Sample sample, - Integer newSection, String sampleThickness, BioState newBioState) { + String newSection, String sampleThickness, BioState newBioState) { this.id = id; this.planOperationId = planOperationId; this.source = source; @@ -89,11 +89,11 @@ public void setSample(Sample sample) { this.sample = sample; } - public Integer getNewSection() { + public String getNewSection() { return this.newSection; } - public void setNewSection(Integer section) { + public void setNewSection(String section) { this.newSection = section; } @@ -135,13 +135,13 @@ public int hashCode() { @Override public String toString() { - return MoreObjects.toStringHelper(this) + return describe(this) .add("id", id) .add("planOperationId", planOperationId) .add("source", source) .add("destination", destination) .add("sample", sample) - .add("newSection", newSection) + .addRepr("newSection", newSection) .add("sampleThickness", sampleThickness) .add("newBioState", newBioState) .toString(); diff --git a/src/main/java/uk/ac/sanger/sccp/stan/model/Sample.java b/src/main/java/uk/ac/sanger/sccp/stan/model/Sample.java index 150878431..63b6a77b6 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/model/Sample.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/model/Sample.java @@ -1,10 +1,10 @@ package uk.ac.sanger.sccp.stan.model; -import com.google.common.base.MoreObjects; - import javax.persistence.*; import java.util.Objects; +import static uk.ac.sanger.sccp.utils.BasicUtils.describe; + /** * A sample is a piece of some tissue that has some particular state and can be located inside slots in labware, * and used in operations. @@ -15,7 +15,7 @@ public class Sample { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; - private Integer section; + private String section; @ManyToOne private Tissue tissue; @ManyToOne @@ -23,7 +23,7 @@ public class Sample { public Sample() {} - public Sample(Integer id, Integer section, Tissue tissue, BioState bioState) { + public Sample(Integer id, String section, Tissue tissue, BioState bioState) { this.id = id; this.section = section; this.tissue = tissue; @@ -38,11 +38,11 @@ public void setId(Integer id) { this.id = id; } - public Integer getSection() { + public String getSection() { return this.section; } - public void setSection(Integer section) { + public void setSection(String section) { this.section = section; } @@ -80,9 +80,9 @@ public int hashCode() { @Override public String toString() { - return MoreObjects.toStringHelper(this) + return describe(this) .add("id", id) - .add("section", section) + .addRepr("section", section) .add("tissue", tissue) .add("bioState", bioState) .toString(); diff --git a/src/main/java/uk/ac/sanger/sccp/stan/repo/PlanActionRepo.java b/src/main/java/uk/ac/sanger/sccp/stan/repo/PlanActionRepo.java index e565ed493..454b10c8c 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/repo/PlanActionRepo.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/repo/PlanActionRepo.java @@ -8,22 +8,9 @@ import java.util.OptionalInt; public interface PlanActionRepo extends CrudRepository { - @Query("SELECT MAX(a.newSection) FROM PlanAction a WHERE a.sample.tissue.id=?1") - Integer _findMaxPlannedSectionForTissueId(int tissueId); - - @Query("SELECT MAX(a.newSection) FROM PlanAction a WHERE a.source.id=?1") + @Query(value = "SELECT MAX(CAST(a.new_section AS UNSIGNED)) FROM plan_action a WHERE a.source_slot_id=?1", nativeQuery = true) Integer _findMaxPlannedSectionFromSlotId(int sourceSlotId); - /** - * Finds the maximum section for planned actions for particular tissue - * @param tissueId the id of tissue - * @return the highest section number of any planned action on a sample with that tissue id - */ - default OptionalInt findMaxPlannedSectionForTissueId(int tissueId) { - Integer maxInteger = _findMaxPlannedSectionForTissueId(tissueId); - return (maxInteger==null ? OptionalInt.empty() : OptionalInt.of(maxInteger)); - } - /** * Finds the maximum section for planned actions from a particular slot * @param sourceSlotId the id of the source slot diff --git a/src/main/java/uk/ac/sanger/sccp/stan/repo/SampleRepo.java b/src/main/java/uk/ac/sanger/sccp/stan/repo/SampleRepo.java index d7014ffac..7ed89c51b 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/repo/SampleRepo.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/repo/SampleRepo.java @@ -1,6 +1,5 @@ package uk.ac.sanger.sccp.stan.repo; -import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import uk.ac.sanger.sccp.stan.model.Sample; @@ -8,25 +7,10 @@ import java.util.*; public interface SampleRepo extends CrudRepository { - @Query("SELECT MAX(section) FROM Sample WHERE tissue.id=?1") - Integer _findMaxSectionForTissueId(int tissueId); - List findAllByIdIn(Collection ids); List findAllByTissueIdIn(Collection tissueIds); - /** - * Finds the maximum section for particular tissue - * - * @param tissueId the id of tissue - * @return the highest section number of any section with that tissue id - * @deprecated no current use case - */ - default OptionalInt findMaxSectionForTissueId(int tissueId) { - Integer maxInteger = _findMaxSectionForTissueId(tissueId); - return maxInteger == null ? OptionalInt.empty() : OptionalInt.of(maxInteger); - } - /** * Gets the samples with the given ids * @param ids the ids to find diff --git a/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/CancelPlanAction.java b/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/CancelPlanAction.java index 79cde6185..a2d3c31ae 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/CancelPlanAction.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/CancelPlanAction.java @@ -13,20 +13,16 @@ public class CancelPlanAction { private Address destinationAddress; private Integer sampleId; - private Integer newSection; + private String newSection; public CancelPlanAction() {} - public CancelPlanAction(Address destinationAddress, Integer sampleId, Integer newSection) { + public CancelPlanAction(Address destinationAddress, Integer sampleId, String newSection) { this.destinationAddress = destinationAddress; this.sampleId = sampleId; this.newSection = newSection; } - public CancelPlanAction(PlanAction planAction) { - this(planAction.getDestination().getAddress(), planAction.getSample().getId(), planAction.getNewSection()); - } - public Address getDestinationAddress() { return this.destinationAddress; } @@ -43,11 +39,11 @@ public void setSampleId(Integer sampleId) { this.sampleId = sampleId; } - public Integer getNewSection() { + public String getNewSection() { return this.newSection; } - public void setNewSection(Integer newSection) { + public void setNewSection(String newSection) { this.newSection = newSection; } @@ -71,7 +67,7 @@ public String toString() { return BasicUtils.describe("CancelPlanAction") .add("destinationAddress", destinationAddress) .add("sampleId", sampleId) - .add("newSection", newSection) + .addRepr("newSection", newSection) .toString(); } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/ConfirmSection.java b/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/ConfirmSection.java index 6c828013c..7b93ccc7b 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/ConfirmSection.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/request/confirm/ConfirmSection.java @@ -16,13 +16,13 @@ public class ConfirmSection { private List
destinationAddresses = List.of(); private Integer sampleId; - private Integer newSection; + private String newSection; private List commentIds = List.of(); private String thickness; public ConfirmSection() {} - public ConfirmSection(List
destinationAddresses, Integer sampleId, Integer newSection, + public ConfirmSection(List
destinationAddresses, Integer sampleId, String newSection, List commentIds) { setDestinationAddress(destinationAddresses); setSampleId(sampleId); @@ -30,12 +30,12 @@ public ConfirmSection(List
destinationAddresses, Integer sampleId, Inte setCommentIds(commentIds); } - public ConfirmSection(Address destinationAddress, Integer sampleId, Integer newSection, + public ConfirmSection(Address destinationAddress, Integer sampleId, String newSection, List commentIds) { this(destinationAddress==null ? null : List.of(destinationAddress), sampleId, newSection, commentIds); } - public ConfirmSection(Address destinationAddress, Integer sampleId, Integer newSection) { + public ConfirmSection(Address destinationAddress, Integer sampleId, String newSection) { this(destinationAddress, sampleId, newSection, null); } @@ -55,11 +55,11 @@ public void setSampleId(Integer sampleId) { this.sampleId = sampleId; } - public Integer getNewSection() { + public String getNewSection() { return this.newSection; } - public void setNewSection(Integer newSection) { + public void setNewSection(String newSection) { this.newSection = newSection; } @@ -102,7 +102,7 @@ public String toString() { return BasicUtils.describe("ConfirmSection") .add("destinationAddresses", destinationAddresses) .add("sampleId", sampleId) - .add("newSection", newSection) + .addRepr("newSection", newSection) .add("commentIds", commentIds) .addRepr("thickness", thickness) .toString(); diff --git a/src/main/java/uk/ac/sanger/sccp/stan/request/register/SectionRegisterContent.java b/src/main/java/uk/ac/sanger/sccp/stan/request/register/SectionRegisterContent.java index e09cdb5aa..d3cbcacf2 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/request/register/SectionRegisterContent.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/request/register/SectionRegisterContent.java @@ -23,7 +23,7 @@ public class SectionRegisterContent { private String replicateNumber; private String fixative; private String medium; - private Integer sectionNumber; + private String sectionNumber; private String sectionThickness; private String region; private LocalDate dateSectioned; @@ -126,11 +126,11 @@ public void setMedium(String medium) { this.medium = medium; } - public Integer getSectionNumber() { + public String getSectionNumber() { return this.sectionNumber; } - public void setSectionNumber(Integer sectionNumber) { + public void setSectionNumber(String sectionNumber) { this.sectionNumber = sectionNumber; } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/graph/GraphServiceImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/graph/GraphServiceImp.java index 54169ab6e..4ad1e8add 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/graph/GraphServiceImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/graph/GraphServiceImp.java @@ -8,13 +8,16 @@ import uk.ac.sanger.sccp.stan.request.history.HistoryGraph.Link; import uk.ac.sanger.sccp.stan.request.history.HistoryGraph.Node; import uk.ac.sanger.sccp.stan.service.releasefile.Ancestoriser.SlotSample; +import uk.ac.sanger.sccp.utils.BasicUtils; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; import static java.util.stream.Collectors.*; import static uk.ac.sanger.sccp.utils.BasicUtils.inMap; +import static uk.ac.sanger.sccp.utils.BasicUtils.nullOrEmpty; /** * @author dr6 @@ -160,10 +163,10 @@ public String describeBio(Collection samples) { return null; } String desc = samples.iterator().next().getBioState().getName(); - List sections = samples.stream() + List sections = samples.stream() .map(Sample::getSection) - .filter(Objects::nonNull) - .sorted() + .filter(s -> !nullOrEmpty(s)) + .sorted(BasicUtils.numberStringComparator()) .distinct() .toList(); if (!sections.isEmpty()) { @@ -177,19 +180,23 @@ public String describeBio(Collection samples) { * @param sections a monotonic sequence of ints * @return a string describing the given sections */ - public String summariseSections(List sections) { + public String summariseSections(List sections) { if (sections.isEmpty()) { return null; } if (sections.size()==1) { - return sections.getFirst().toString(); + return sections.getFirst(); } if (sections.size()==2) { - return sections.getFirst().toString()+","+sections.getLast().toString(); - } - if (sections.getLast()==sections.getFirst()+sections.size()-1) { - return sections.getFirst()+"-"+sections.getLast(); + return sections.getFirst()+","+sections.getLast(); } + try { + int firstNum = Integer.parseInt(sections.getFirst()); + if (IntStream.range(1, sections.size()) + .allMatch(i -> Integer.toString(i+firstNum).equals(sections.get(i)))) { + return firstNum+"-"+sections.getLast(); + } + } catch (NumberFormatException ignored) {} return sections.stream() .map(Object::toString) .collect(joining(",")); diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelData.java b/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelData.java index 0125382d2..31ceb2582 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelData.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelData.java @@ -5,6 +5,7 @@ import java.util.*; +import static uk.ac.sanger.sccp.utils.BasicUtils.nullOrEmpty; import static uk.ac.sanger.sccp.utils.BasicUtils.nullToEmpty; /** @@ -115,29 +116,39 @@ public Map getFields() { } private void addField(Map map, String fieldName, int index, String value) { - if (value!=null && !value.isEmpty()) { + if (!nullOrEmpty(value)) { map.put(fieldName+"["+index+"]", value); } } public record LabelContent(String donorName, String externalName, String tissueDesc, String replicate, String stateDesc) { public LabelContent() { - this(null, null, null, null, (String) null); + this(null, null, null, null, null); } - public LabelContent(String donorName, String externalName, String tissueDesc, String replicate, Integer section) { - this(donorName, externalName, tissueDesc, replicate, section==null ? null : String.format("S%03d", section)); - } - - public LabelContent(String donorName, String externalName, String tissueDesc, String replicate, Integer minSection, Integer maxSection) { - this(donorName, externalName, tissueDesc, replicate, minSection==null ? null : - String.format(maxSection==null || minSection.equals(maxSection) ? "S%03d" : "S%03d+", minSection)); + public LabelContent(String donorName, String externalName, String tissueDesc, String replicate, String minSection, String maxSection) { + this(donorName, externalName, tissueDesc, replicate, descSection(minSection, maxSection)); } public LabelContent withStateDesc(String newStateDesc) { return new LabelContent(this.donorName, this.externalName, this.tissueDesc, this.replicate, newStateDesc); } + public static LabelContent ofSection(String donorName, String externalName, String tissueDesc, String replicate, String section) { + String state = (nullOrEmpty(section) ? null : ("S"+section)); + return new LabelContent(donorName, externalName, tissueDesc, replicate, state); + } + + private static String descSection(String s1, String s2) { + if (nullOrEmpty(s1)) { + return null; + } + if (nullOrEmpty(s2) || s1.equals(s2)) { + return "S"+s1; + } + return "S"+s1+"+"; + } + @NotNull @Override public String toString() { diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelDataService.java b/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelDataService.java index 41da66efd..df0b95806 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelDataService.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/label/LabwareLabelDataService.java @@ -14,8 +14,7 @@ import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; -import static uk.ac.sanger.sccp.utils.BasicUtils.getSingleValue; -import static uk.ac.sanger.sccp.utils.BasicUtils.reverseIter; +import static uk.ac.sanger.sccp.utils.BasicUtils.*; /** * Service for creating LabwareLabelData from labware. @@ -197,7 +196,7 @@ public LabwareLabelData getRowBasedLabelData(Labware labware) { .mapToObj(col -> map.get(new Address(row, col))) .filter(Objects::nonNull) .flatMap(Collection::stream); - Integer[] sectionRange = sectionRange(scStream.iterator()); + String[] sectionRange = sectionRange(scStream.iterator()); content.add(new LabelContent(donorNames[i], externalNames[i], tissueDescs[i], reps[i], sectionRange[0], sectionRange[1])); } } @@ -253,7 +252,7 @@ public LabwareLabelData getDividedLabelData(Labware labware) { if (tissues[tissueIndex]==null) { content.add(new LabelContent()); } else { - Integer[] sectionRange = sectionRange(map.get(new Address(row, col))); + String[] sectionRange = sectionRange(map.get(new Address(row, col))); content.add(new LabelContent(donorNames[tissueIndex], externalNames[tissueIndex], tissueDescs[tissueIndex], reps[tissueIndex], sectionRange[0], sectionRange[1])); } @@ -323,9 +322,9 @@ public Tissue[] checkDividedLayout(Labware labware, Map scs) { + public String[] sectionRange(Collection scs) { if (scs == null || scs.isEmpty()) { - return new Integer[] { null, null }; + return new String[] { null, null }; } return sectionRange(scs.iterator()); } @@ -336,20 +335,20 @@ public Integer[] sectionRange(Collection scs) { * @param scs an iterator for SimpleContents * @return the min and max of sections in the given contents, in an array */ - public Integer[] sectionRange(Iterator scs) { - Integer minSection = null, maxSection = null; + public String[] sectionRange(Iterator scs) { + String minSection = null, maxSection = null; while (scs.hasNext()) { SimpleContent sc = scs.next(); - if (sc.section != null) { - if (minSection == null || sc.section < minSection) { + if (!nullOrEmpty(sc.section)) { + if (minSection == null || compareNumberStrings(sc.section, minSection) < 0) { minSection = sc.section; } - if (maxSection == null || sc.section > maxSection) { + if (maxSection == null || compareNumberStrings(sc.section, maxSection) > 0) { maxSection = sc.section; } } } - return new Integer[] { minSection, maxSection }; + return new String[] { minSection, maxSection }; } @@ -377,8 +376,8 @@ public Map> addressToSimpleContent(Labware labware) Slot slot = pa.getDestination(); if (slot.getLabwareId().equals(labware.getId())) { Sample sample = pa.getSample(); - Integer section = pa.getNewSection(); - if (section==null) { + String section = pa.getNewSection(); + if (nullOrEmpty(section)) { section = sample.getSection(); } SimpleContent sc = new SimpleContent(pa.getSample().getTissue(), section); @@ -396,7 +395,7 @@ public LabelContent getContent(Sample sample) { Tissue tissue = sample.getTissue(); String stateDesc = sample.getBioState().getName(); if (stateDesc.equalsIgnoreCase("Tissue")) { - return new LabelContent(tissue.getDonor().getDonorName(), tissue.getExternalName(), + return LabelContent.ofSection(tissue.getDonor().getDonorName(), tissue.getExternalName(), getTissueDesc(tissue), tissue.getReplicate(), sample.getSection()); } if (stateDesc.equalsIgnoreCase("Original sample")) { @@ -439,12 +438,12 @@ public LabelContent getContent(PlanAction planAction) { } String stateDesc = bs.getName(); if (stateDesc.equalsIgnoreCase("Tissue")) { - Integer section = planAction.getNewSection(); - if (section == null) { + String section = planAction.getNewSection(); + if (nullOrEmpty(section)) { section = planAction.getSample().getSection(); } - return new LabelContent( + return LabelContent.ofSection( planAction.getSample().getTissue().getDonor().getDonorName(), planAction.getSample().getTissue().getExternalName(), getTissueDesc(planAction.getSample().getTissue()), @@ -464,7 +463,7 @@ public LabelContent getContent(PlanAction planAction) { ); } - public record SimpleContent(Tissue tissue, Integer section) { + public record SimpleContent(Tissue tissue, String section) { public SimpleContent(Sample sample) { this(sample.getTissue(), sample.getSection()); } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationServiceImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationServiceImp.java index ac537de41..1bcedda55 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationServiceImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationServiceImp.java @@ -207,7 +207,7 @@ public ConfirmLabwareResult performConfirmation(ConfirmOperationLabware col, Lab */ public Sample getOrCreateSample(PlanAction planAction, Slot dest) { final Sample sourceSample = planAction.getSample(); - final Integer correctSection = coalesce(planAction.getNewSection(), sourceSample.getSection()); + final String correctSection = coalesce(planAction.getNewSection(), sourceSample.getSection()); final BioState correctBioState = coalesce(planAction.getNewBioState(), sourceSample.getBioState()); if (Objects.equals(correctSection, sourceSample.getSection()) && correctBioState.getId().equals(sourceSample.getBioState().getId())) { @@ -270,7 +270,7 @@ private Action makeAction(PlanAction planAction, Slot destination, Sample sample return new Action(null, null, planAction.getSource(), destination, sample, planAction.getSample()); } - private Sample createNewSample(Sample sourceSample, Integer section, BioState bioState) { + private Sample createNewSample(Sample sourceSample, String section, BioState bioState) { return sampleRepo.save(new Sample(null, section, sourceSample.getTissue(), bioState)); } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationValidationImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationValidationImp.java index 8c562427e..95e6e89fb 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationValidationImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmOperationValidationImp.java @@ -3,8 +3,8 @@ import uk.ac.sanger.sccp.stan.model.*; import uk.ac.sanger.sccp.stan.repo.LabwareRepo; import uk.ac.sanger.sccp.stan.repo.PlanOperationRepo; -import uk.ac.sanger.sccp.stan.request.confirm.*; import uk.ac.sanger.sccp.stan.request.AddressCommentId; +import uk.ac.sanger.sccp.stan.request.confirm.*; import uk.ac.sanger.sccp.stan.service.CommentValidationService; import java.util.*; @@ -155,7 +155,7 @@ public void validateCancelledActions(Collection cancelledActio LabwareType lt = lw.getLabwareType(); final Set candidates = plan.getPlanActions().stream() .filter(pa -> pa.getDestination().getLabwareId().equals(labwareId)) - .map(CancelPlanAction::new) + .map(CancelPlanAction::forPlanAction) .collect(toSet()); for (CancelPlanAction cpa : cancelledActions) { boolean ok = true; @@ -171,6 +171,10 @@ public void validateCancelledActions(Collection cancelledActio addProblem("No sample id specified in cancelled plan action."); ok = false; } + if (cpa.getNewSection() != null) { + // Make sure new section string is lower case to match expected format + cpa.setNewSection(cpa.getNewSection().toLowerCase()); + } if (ok && !candidates.contains(cpa)) { addProblem("Cancelled plan action does not match any action in the plan: %s", cpa.describeWithBarcode(lw.getBarcode())); diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionServiceImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionServiceImp.java index d6d9cebf7..779f7f50e 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionServiceImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionServiceImp.java @@ -262,7 +262,7 @@ public Action makeAction(Sample newSample, PlanAction pa, Slot slot) { Sample getSection(Map sectionMap, ConfirmSection sec, PlanAction pa, Slot slot) { Sample sourceSample = pa.getSample(); Tissue tissue = sourceSample.getTissue(); - Integer section = sec.getNewSection(); + String section = sec.getNewSection(); BioState bs = coalesce(pa.getNewBioState(), sourceSample.getBioState()); SectionKey key = new SectionKey(tissue.getId(), section, bs); Sample sam = sectionMap.get(key); @@ -288,7 +288,7 @@ Sample getSection(Map sectionMap, ConfirmSection sec, PlanAc * @param bs the biostate for the new sample * @return a new sample which has been created in the database */ - public Sample createSection(Tissue tissue, Integer section, BioState bs) { + public Sample createSection(Tissue tissue, String section, BioState bs) { return sampleRepo.save(new Sample(null, section, tissue, bs)); } @@ -380,8 +380,9 @@ public void updateSourceBlocks(Collection ops) { alreadyHighestSection = slotInMap.getBlockHighestSection(); } } - if (alreadyHighestSection == null || alreadyHighestSection < sample.getSection()) { - src.setBlockHighestSection(sample.getSection()); + Integer sectionInt = parseSectionInt(sample.getSection()); + if (sectionInt != null && (alreadyHighestSection == null || alreadyHighestSection < sectionInt)) { + src.setBlockHighestSection(sectionInt); slotsToUpdate.put(src.getId(), src); } } @@ -390,8 +391,32 @@ public void updateSourceBlocks(Collection ops) { slotRepo.saveAll(slotsToUpdate.values()); } + /** + * Parses the integer part of a section string + * @param string the section string + * @return the integer part, or null if there is no integer part + */ + static Integer parseSectionInt(String string) { + if (nullOrEmpty(string)) { + return null; + } + int len = string.length(); + int n = 0; + for (int i = 0; i < len; ++i) { + char ch = string.charAt(i); + if (ch < '0' || ch > '9') { + if (i==0) { + return null; + } + break; + } + n = n * 10 + (ch - '0'); + } + return n; + } + /** Deduplication key for samples */ - record SectionKey(Integer tissueId, Integer section, BioState bs) {} + record SectionKey(Integer tissueId, String section, BioState bs) {} /** * The result on an individual piece of labware of the confirmation request. diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionValidationServiceImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionValidationServiceImp.java index 6303a3b8c..0daf9cffc 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionValidationServiceImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/operation/confirm/ConfirmSectionValidationServiceImp.java @@ -9,6 +9,7 @@ import uk.ac.sanger.sccp.stan.request.confirm.*; import uk.ac.sanger.sccp.stan.request.confirm.ConfirmSectionLabware.AddressCommentId; import uk.ac.sanger.sccp.stan.service.CommentValidationService; +import uk.ac.sanger.sccp.stan.service.Validator; import uk.ac.sanger.sccp.stan.service.sanitiser.Sanitiser; import uk.ac.sanger.sccp.stan.service.work.WorkService; import uk.ac.sanger.sccp.utils.BasicUtils; @@ -19,8 +20,8 @@ import static java.util.Objects.requireNonNull; import static java.util.stream.Collectors.toSet; -import static uk.ac.sanger.sccp.utils.BasicUtils.nullOrEmpty; -import static uk.ac.sanger.sccp.utils.BasicUtils.repr; +import static uk.ac.sanger.sccp.stan.service.operation.confirm.ConfirmSectionServiceImp.parseSectionInt; +import static uk.ac.sanger.sccp.utils.BasicUtils.*; /** * @author dr6 @@ -32,16 +33,19 @@ public class ConfirmSectionValidationServiceImp implements ConfirmSectionValidat private final WorkService workService; private final CommentValidationService commentValidationService; private final Sanitiser thicknessSanitiser; + private final Validator sectionValidator; @Autowired public ConfirmSectionValidationServiceImp(LabwareRepo labwareRepo, PlanOperationRepo planOpRepo, WorkService workService, CommentValidationService commentValidationService, - @Qualifier("thicknessSanitiser") Sanitiser thicknessSanitiser) { + @Qualifier("thicknessSanitiser") Sanitiser thicknessSanitiser, + @Qualifier("sectionValidator") Validator sectionValidator) { this.labwareRepo = labwareRepo; this.planOpRepo = planOpRepo; this.workService = workService; this.commentValidationService = commentValidationService; this.thicknessSanitiser = thicknessSanitiser; + this.sectionValidator = sectionValidator; } @Override @@ -195,7 +199,7 @@ public Map lookUpPlans(Collection problems, Coll */ public void validateOperations(Collection problems, List cols, UCMap labware, Map labwarePlans) { - final Map> sampleIdSections = new HashMap<>(); + final Map> sampleIdSections = new HashMap<>(); for (ConfirmSectionLabware col : cols) { if (col.getBarcode()==null || col.getBarcode().isEmpty()) { continue; @@ -276,7 +280,7 @@ public void sanitiseThickness(Collection problems, Collection problems, List cons, - Labware lw, PlanOperation plan, final Map> sampleIdSections) { + Labware lw, PlanOperation plan, final Map> sampleIdSections) { // The expected sample ids in each address of lw final Map> plannedSampleIds = new HashMap<>(); // The max section id already taken from a given block (from its sample id) @@ -313,7 +317,7 @@ public void validateSections(Collection problems, List c */ public void validateSection(Collection problems, Labware lw, ConfirmSection con, Map> plannedSampleIds, Map sampleMaxSection, - Map> sampleIdSections) { + Map> sampleIdSections) { boolean ok = true; final LabwareType lt = lw.getLabwareType(); if (nullOrEmpty(con.getDestinationAddresses())) { @@ -334,7 +338,10 @@ public void validateSection(Collection problems, Labware lw, ConfirmSect } } final Integer sampleId = con.getSampleId(); - final Integer section = con.getNewSection(); + String section = emptyToNull(con.getNewSection()); + if (section != null) { + section = section.toLowerCase(); + } if (sampleId == null) { addProblem(problems, "Sample id not specified for section."); ok = false; @@ -347,9 +354,11 @@ public void validateSection(Collection problems, Labware lw, ConfirmSect } else if (section == null) { addProblem(problems, "Section number not specified for section."); ok = false; - } else if (section < 0) { - addProblem(problems, "Section number cannot be less than zero."); - ok = false; + } else { + if (!sectionValidator.validate(section, s -> addProblem(problems, s))) { + ok = false; + } + con.setNewSection(section.toLowerCase()); // make sure section string is lowercase } if (!ok) { @@ -362,7 +371,7 @@ public void validateSection(Collection problems, Labware lw, ConfirmSect } } - Set sections = sampleIdSections.get(sampleId); + Set sections = sampleIdSections.get(sampleId); if (sections == null) { sections = new HashSet<>(); sections.add(section); @@ -373,7 +382,8 @@ public void validateSection(Collection problems, Labware lw, ConfirmSect sections.add(section); } Integer maxSection = sampleMaxSection.get(sampleId); - if (maxSection != null && section != null && section <= maxSection) { + Integer sectionInt = parseSectionInt(section); + if (maxSection != null && sectionInt != null && sectionInt <= maxSection) { addProblem(problems, "Section numbers from sample id %s must be greater than %s.", sampleId, maxSection); } } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/register/RegisterValidationFactory.java b/src/main/java/uk/ac/sanger/sccp/stan/service/register/RegisterValidationFactory.java index e7eb8efd9..e502e1e1c 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/register/RegisterValidationFactory.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/register/RegisterValidationFactory.java @@ -34,6 +34,7 @@ public class RegisterValidationFactory { private final Validator xeniumBarcodeValidator; private final Validator replicateValidator; private final Validator xeniumLotValidator; + private final Validator sectionValidator; private final Sanitiser thicknessSanitiser; private final TissueFieldChecker tissueFieldChecker; private final SlotRegionService slotRegionService; @@ -53,6 +54,7 @@ public RegisterValidationFactory(DonorRepo donorRepo, HmdmcRepo hmdmcRepo, Tissu @Qualifier("thicknessSanitiser") Sanitiser thicknessSanitiser, @Qualifier("xeniumLotValidator") Validator xeniumLotValidator, @Qualifier("replicateValidator") Validator replicateValidator, + @Qualifier("sectionValidator") Validator sectionValidator, TissueFieldChecker tissueFieldChecker, SlotRegionService slotRegionService, BioRiskService bioRiskService, WorkService workService) { this.donorRepo = donorRepo; @@ -74,6 +76,7 @@ public RegisterValidationFactory(DonorRepo donorRepo, HmdmcRepo hmdmcRepo, Tissu this.replicateValidator = replicateValidator; this.xeniumLotValidator = xeniumLotValidator; this.thicknessSanitiser = thicknessSanitiser; + this.sectionValidator = sectionValidator; this.tissueFieldChecker = tissueFieldChecker; this.slotRegionService = slotRegionService; this.workService = workService; @@ -91,6 +94,7 @@ public SectionRegisterValidation createSectionRegisterValidation(SectionRegister hmdmcRepo, ttRepo, fixativeRepo, cellClassRepo, mediumRepo, tissueRepo, bioStateRepo, slotRegionService, bioRiskService, workService, externalBarcodeValidation, donorNameValidation, externalNameValidation, replicateValidator, - visiumLpSlideBarcodeValidation, xeniumBarcodeValidator, xeniumLotValidator, thicknessSanitiser); + visiumLpSlideBarcodeValidation, xeniumBarcodeValidator, xeniumLotValidator, sectionValidator, + thicknessSanitiser); } } diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/register/SectionRegisterValidation.java b/src/main/java/uk/ac/sanger/sccp/stan/service/register/SectionRegisterValidation.java index 91745b543..56fe2c536 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/register/SectionRegisterValidation.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/register/SectionRegisterValidation.java @@ -45,6 +45,7 @@ public class SectionRegisterValidation { private final Validator xeniumBarcodeValidator; private final Validator replicateValidator; private final Validator xeniumLotValidator; + private final Validator sectionValidator; private final Sanitiser thicknessSanitiser; @@ -57,7 +58,7 @@ public SectionRegisterValidation(SectionRegisterRequest request, Validator externalBarcodeValidation, Validator donorNameValidation, Validator externalNameValidation, Validator replicateValidator, Validator visiumLpBarcodeValidation, Validator xeniumBarcodeValidator, - Validator xeniumLotValidator, + Validator xeniumLotValidator, Validator sectionValidator, Sanitiser thicknessSanitiser) { this.request = request; this.donorRepo = donorRepo; @@ -81,6 +82,7 @@ public SectionRegisterValidation(SectionRegisterRequest request, this.visiumLpBarcodeValidation = visiumLpBarcodeValidation; this.xeniumBarcodeValidator = xeniumBarcodeValidator; this.xeniumLotValidator = xeniumLotValidator; + this.sectionValidator = sectionValidator; this.thicknessSanitiser = thicknessSanitiser; } @@ -464,8 +466,9 @@ public UCMap validateSamples(UCMap tissueMap) { for (var content : contents()) { if (content.getSectionNumber()==null) { addProblem("Missing section number."); - } else if (content.getSectionNumber() < 0) { - addProblem("Section number cannot be negative."); + } else { + sectionValidator.validate(content.getSectionNumber(), this::addProblem); + content.setSectionNumber(content.getSectionNumber().toLowerCase()); } if (content.getSectionThickness()!=null) { if (content.getSectionThickness().isBlank()) { diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReader.java b/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReader.java index d03c3ac20..7101ab8a3 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReader.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReader.java @@ -37,7 +37,7 @@ enum Column implements IColumn { Spatial_location(Integer.class, Pattern.compile("spatial\\s*location\\s*(number)?", Pattern.CASE_INSENSITIVE), true), Replicate_number, Section_external_ID, - Section_number(Integer.class), + Section_number(String.class), Section_thickness(String.class), Date_sectioned(LocalDate.class, Pattern.compile("date.*sectioned|section.*date", Pattern.CASE_INSENSITIVE|Pattern.DOTALL), false), Section_position(Pattern.compile("(if.+)?(section\\s+)?position|position.*slot.*", Pattern.CASE_INSENSITIVE|Pattern.DOTALL)), diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReaderImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReaderImp.java index 8f08017ca..5b6be6784 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReaderImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/register/filereader/SectionRegisterFileReaderImp.java @@ -109,7 +109,7 @@ public SectionRegisterContent createRequestContent(Collection problems, content.setFixative((String) row.get(Column.Fixative)); content.setHmdmc((String) row.get(Column.HuMFre)); content.setBioRiskCode((String) row.get(Column.Bio_risk)); - content.setSectionNumber((Integer) row.get(Column.Section_number)); + content.setSectionNumber((String) row.get(Column.Section_number)); content.setMedium((String) row.get(Column.Embedding_medium)); content.setDonorIdentifier((String) row.get(Column.Donor_ID)); content.setLifeStage(valueToLifeStage(problems, (String) row.get(Column.Life_stage))); diff --git a/src/main/java/uk/ac/sanger/sccp/utils/BasicUtils.java b/src/main/java/uk/ac/sanger/sccp/utils/BasicUtils.java index a95b21340..f561f6b83 100644 --- a/src/main/java/uk/ac/sanger/sccp/utils/BasicUtils.java +++ b/src/main/java/uk/ac/sanger/sccp/utils/BasicUtils.java @@ -688,4 +688,20 @@ public static Optional getSingleValue(Iterator iterator) { public static Iterable chain(Iterable iter1, Iterable iter2) { return () -> Stream.concat(stream(iter1), stream(iter2)).iterator(); } + + /** + * Compares strings in such a way that digit sequences of different lengths are sorted according to their + * numerical values. + * For instance, {@code "Alpha 9 beta"} will precede {@code "Alpha 10 beta"} + * It doesn't check for minus signs, because they are + * just as likely to be hyphens. + */ + public static int compareNumberStrings(String a, String b) { + return StringUtils.compareNumberStrings(a, b); + } + + /** Comparator to sort number strings */ + public static Comparator numberStringComparator() { + return BasicUtils::compareNumberStrings; + } } diff --git a/src/main/resources/db/changelog/changelog-3.20.xml b/src/main/resources/db/changelog/changelog-3.20.xml new file mode 100644 index 000000000..b1f54af48 --- /dev/null +++ b/src/main/resources/db/changelog/changelog-3.20.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changelog-master.xml b/src/main/resources/db/changelog/changelog-master.xml index 142d0b0b4..9ba9786d8 100644 --- a/src/main/resources/db/changelog/changelog-master.xml +++ b/src/main/resources/db/changelog/changelog-master.xml @@ -43,4 +43,5 @@ + diff --git a/src/main/resources/schema.graphqls b/src/main/resources/schema.graphqls index 72f02141d..afccad217 100644 --- a/src/main/resources/schema.graphqls +++ b/src/main/resources/schema.graphqls @@ -218,8 +218,8 @@ type Tissue { """A particular sample of tissue, in a particular state.""" type Sample { id: Int! - """An optional number describing the particular slice through the block of tissue that this sample came from.""" - section: Int + """An optional string describing the particular slice through the block of tissue that this sample came from.""" + section: String """The tissue this sample is derived from.""" tissue: Tissue! """The state of this particular sample.""" @@ -392,7 +392,7 @@ input SectionRegisterContent { """The medium used for the tissue.""" medium: String! """The section number of this particular section from its original tissue block.""" - sectionNumber: Int! + sectionNumber: String! """The thickness, if known, of this section.""" sectionThickness: String """The region of this sample in this slot, if any.""" @@ -513,7 +513,7 @@ type PlanAction { """The sample in the source labware that we want to act upon.""" sample: Sample! """The new section number, if the source is a block and it is being sectioned.""" - newSection: Int + newSection: String """The planned thickness of the sample, if any.""" sampleThickness: String } @@ -575,7 +575,7 @@ input CancelPlanAction { """The sample id of the planned action to cancel.""" sampleId: Int! """The new section number (if any) of the planned action to cancel.""" - newSection: Int + newSection: String } """A specification of a particular piece of labware in a confirm request.""" @@ -602,7 +602,7 @@ input ConfirmSection { """The original sample id of the source.""" sampleId: Int! """The section number of the new section.""" - newSection: Int + newSection: String """The comment ids to record against this sample in this slot.""" commentIds: [Int!] """The thickness of the section, overriding the thickness specified in the plan.""" diff --git a/src/test/java/uk/ac/sanger/sccp/stan/EntityCreator.java b/src/test/java/uk/ac/sanger/sccp/stan/EntityCreator.java index 17ca82837..97ff02481 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/EntityCreator.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/EntityCreator.java @@ -130,7 +130,8 @@ public Sample createSample(Tissue tissue, Integer section, BioState bioState) { if (bioState==null) { bioState = bioStateRepo.getByName("Tissue"); } - return sampleRepo.save(new Sample(null, section, tissue, bioState)); + String sectionString = (section==null ? null : ""+section); + return sampleRepo.save(new Sample(null, sectionString, tissue, bioState)); } public Labware createTube(String barcode) { diff --git a/src/test/java/uk/ac/sanger/sccp/stan/EntityFactory.java b/src/test/java/uk/ac/sanger/sccp/stan/EntityFactory.java index fcd23494d..f23718bff 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/EntityFactory.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/EntityFactory.java @@ -123,7 +123,7 @@ public static Tissue getTissue() { public static Sample getSample() { if (sample==null) { - sample = new Sample(90, 1, getTissue(), getBioState()); + sample = new Sample(90, "1", getTissue(), getBioState()); } return sample; } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPlanAndRecordSectionMutations.java b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPlanAndRecordSectionMutations.java index f3877218a..720a3f388 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPlanAndRecordSectionMutations.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPlanAndRecordSectionMutations.java @@ -174,13 +174,13 @@ private void testConfirm(Sample[] blockSamples, Labware[] sourceBlocks, String[] .findAny() .orElseThrow(), "samples"); - int[] expectedSecNum = { 14 }; + String[] expectedSecNum = { "14" }; assertEquals(expectedSecNum.length, a1Samples.size()); for (int i = 0; i < expectedSecNum.length; ++i) { Map sam = a1Samples.get(i); assertEquals("TISSUE1", chainGet(sam, "tissue", "externalName")); - assertEquals(expectedSecNum[i], (int) sam.get("section")); + assertEquals(expectedSecNum[i], sam.get("section")); assertEquals("Tissue", chainGet(sam, "bioState", "name")); } @@ -202,7 +202,7 @@ private void testConfirm(Sample[] blockSamples, Labware[] sourceBlocks, String[] assertEquals(1, b2Samples.size()); Map sam = b2Samples.get(0); assertEquals("TISSUE2", chainGet(sam, "tissue", "externalName")); - assertEquals(17, (int) sam.get("section")); + assertEquals("17", sam.get("section")); List> resultOps = chainGet(resultConfirm, "operations"); assertEquals(3, resultOps.size()); @@ -213,7 +213,7 @@ private void testConfirm(Sample[] blockSamples, Labware[] sourceBlocks, String[] int[] expectedSourceLabwareIds = {sourceBlocks[0].getId(), sourceBlocks[0].getId(), sourceBlocks[1].getId()}; String[] expectedDestAddress = { "A1", "A2", "B2" }; String[] expectedActionTissues = { "TISSUE1", "TISSUE1", "TISSUE2" }; - int[] expectedActionSecNum = { 14,14,17 }; + String[] expectedActionSecNum = { "14","14","17" }; assertEquals(expectedSourceLabwareIds.length, actions.size()); int destLabwareId = -1; @@ -232,7 +232,7 @@ private void testConfirm(Sample[] blockSamples, Labware[] sourceBlocks, String[] assertEquals(destLabwareId, (int) chainGet(action, "destination", "labwareId")); } assertEquals(expectedActionTissues[i], chainGet(action, "sample", "tissue", "externalName")); - assertEquals(expectedActionSecNum[i], (int) chainGet(action, "sample", "section")); + assertEquals(expectedActionSecNum[i], chainGet(action, "sample", "section")); sampleIds.add(chainGet(action, "sample", "id")); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPrintMutation.java b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPrintMutation.java index 8ca0e2789..8e5dc9f5b 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPrintMutation.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestPrintMutation.java @@ -67,9 +67,9 @@ public void testPrintLabware() throws Exception { lw.getLabwareType().getLabelType(), List.of(new LabwareLabelData(lw.getBarcode(), lw.getExternalBarcode(), tissue.getMedium().getName(), "2021-03-17", List.of( - new LabwareLabelData.LabelContent(donorName, tissue.getExternalName(), tissueDesc, replicate, 1), - new LabwareLabelData.LabelContent(donorName, tissue.getExternalName(), tissueDesc, replicate, 2), - new LabwareLabelData.LabelContent(donorName, tissue.getExternalName(), tissueDesc, replicate, 3), + LabwareLabelData.LabelContent.ofSection(donorName, tissue.getExternalName(), tissueDesc, replicate, "1"), + LabwareLabelData.LabelContent.ofSection(donorName, tissue.getExternalName(), tissueDesc, replicate, "2"), + LabwareLabelData.LabelContent.ofSection(donorName, tissue.getExternalName(), tissueDesc, replicate, "3"), new LabwareLabelData.LabelContent(donorName, tissue.getExternalName(), tissueDesc, replicate, "RNA") ), Map.of("externalName", tissue.getExternalName())) )) @@ -82,9 +82,9 @@ public void testPrintLabware() throws Exception { assertNotNull(record.getPrinted()); assertNotNull(record.getId()); - assertEquals(record.getLabware().getId(), lw.getId()); - assertEquals(record.getPrinter().getId(), printer.getId()); - assertEquals(record.getUser().getUsername(), "dr6"); + assertEquals(lw.getId(), record.getLabware().getId()); + assertEquals(printer.getId(), record.getPrinter().getId()); + assertEquals("dr6", record.getUser().getUsername()); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestRegisterMutation.java b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestRegisterMutation.java index 27ba6019a..e73d8bc58 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestRegisterMutation.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestRegisterMutation.java @@ -151,7 +151,7 @@ public void testSectionRegister() throws Exception { assertEquals("TISSUE3", sample.getTissue().getExternalName()); assertEquals("DONOR1", sample.getTissue().getDonor().getDonorName()); assertEquals("8", sample.getTissue().getReplicate()); - assertEquals(11, sample.getSection()); + assertEquals("11", sample.getSection()); List measurements = measurementRepo.findAllBySlotIdIn(List.of(slotB2.getId())); assertThat(measurements).hasSize(1); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/repo/TestPlanActionRepo.java b/src/test/java/uk/ac/sanger/sccp/stan/repo/TestPlanActionRepo.java index 88362a8d4..44f682fd4 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/repo/TestPlanActionRepo.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/repo/TestPlanActionRepo.java @@ -69,7 +69,6 @@ public TestPlanActionRepo(EntityCreator entityCreator, @Test @Transactional public void testFindMaxPlannedSection() { - assertThat(planActionRepo.findMaxPlannedSectionForTissueId(-1)).isEmpty(); assertThat(planActionRepo.findMaxPlannedSectionFromSlotId(-1)).isEmpty(); Donor donor = new Donor(null, "DONOR", LifeStage.adult, entityCreator.getHuman()); donorRepo.save(donor); @@ -77,7 +76,7 @@ public void testFindMaxPlannedSection() { any(mediumRepo), any(fixativeRepo), entityCreator.getTissueCellClass(), any(hmdmcRepo), null, null); BioState bioState = any(bioStateRepo); tissueRepo.save(tissue); - final Sample sample = new Sample(null, 3, tissue, bioState); + final Sample sample = new Sample(null, "3", tissue, bioState); sampleRepo.save(sample); @@ -95,10 +94,9 @@ public void testFindMaxPlannedSection() { slotRepo.save(slot2); slotRepo.save(slot3); - planActionRepo.save(new PlanAction(null, plan.getId(), slot1, slot1, sample, 3, null, null)); - planActionRepo.save(new PlanAction(null, plan.getId(), slot2, slot2, sample, 18, null, null)); - planActionRepo.save(new PlanAction(null, plan.getId(), slot3, slot3, sample, 4, null, null)); - assertThat(planActionRepo.findMaxPlannedSectionForTissueId(tissue.getId())).hasValue(18); + planActionRepo.save(new PlanAction(null, plan.getId(), slot1, slot1, sample, "3", null, null)); + planActionRepo.save(new PlanAction(null, plan.getId(), slot2, slot2, sample, "18", null, null)); + planActionRepo.save(new PlanAction(null, plan.getId(), slot3, slot3, sample, "4", null, null)); assertThat(planActionRepo.findMaxPlannedSectionFromSlotId(slot1.getId())).hasValue(3); assertThat(planActionRepo.findMaxPlannedSectionFromSlotId(slot2.getId())).hasValue(18); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/repo/TestSampleRepo.java b/src/test/java/uk/ac/sanger/sccp/stan/repo/TestSampleRepo.java index 0000b6293..c2d46d567 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/repo/TestSampleRepo.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/repo/TestSampleRepo.java @@ -30,21 +30,6 @@ public TestSampleRepo(EntityCreator entityCreator, SampleRepo sampleRepo) { this.sampleRepo = sampleRepo; } - @SuppressWarnings("deprecation") - @Test - @Transactional - public void testFindMaxSectionForTissueId() { - assertThat(sampleRepo.findMaxSectionForTissueId(-1)).isEmpty(); - Donor donor = entityCreator.createDonor("DONOR"); - Tissue tissue = entityCreator.createTissue(donor, "TISSUE1"); - BioState bioState = entityCreator.anyBioState(); - - sampleRepo.save(new Sample(null, 3, tissue, bioState)); - sampleRepo.save(new Sample(null, 18, tissue, bioState)); - sampleRepo.save(new Sample(null, 4, tissue, bioState)); - assertThat(sampleRepo.findMaxSectionForTissueId(tissue.getId())).hasValue(18); - } - @Test @Transactional public void testFindAllByTissueIdIn() { diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/LabwareServiceTest.java b/src/test/java/uk/ac/sanger/sccp/stan/service/LabwareServiceTest.java index b3663e7ba..95f1bca76 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/LabwareServiceTest.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/LabwareServiceTest.java @@ -1,6 +1,5 @@ package uk.ac.sanger.sccp.stan.service; -import com.google.common.collect.Streams; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -11,6 +10,7 @@ import uk.ac.sanger.sccp.stan.model.*; import uk.ac.sanger.sccp.stan.repo.*; import uk.ac.sanger.sccp.stan.service.LabwareService.SampleBioRisk; +import uk.ac.sanger.sccp.utils.Zip; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; @@ -136,13 +136,11 @@ public void testCreateWithBarcode() { assertThat(savedLabware).hasSize(1).contains(lw); assertThat(lw.getSlots()).hasSize(6); assertThat(savedSlots).hasSameSizeAs(lw.getSlots()).hasSameElementsAs(lw.getSlots()); - //noinspection UnstableApiUsage - Streams.forEachPair(Address.stream(lt.getNumRows(), lt.getNumColumns()), lw.getSlots().stream(), - (address, slot) -> { - assertEquals(address, slot.getAddress()); - assertEquals(slot.getLabwareId(), lw.getId()); - assertNotNull(slot.getId()); - }); + Zip.of(Address.stream(lt.getNumRows(), lt.getNumColumns()), lw.getSlots().stream()).forEach((address, slot) -> { + assertEquals(address, slot.getAddress()); + assertEquals(slot.getLabwareId(), lw.getId()); + assertNotNull(slot.getId()); + }); } @Test @@ -156,8 +154,7 @@ public void testCreateMultiple() { final Address A1 = new Address(1,1); final Address A2 = new Address(1,2); final List allSlots = new ArrayList<>(6); - //noinspection UnstableApiUsage - Streams.forEachPair(lws.stream(), barcodes.stream(), (lw, bc) -> { + Zip.of(lws.stream(), barcodes.stream()).forEach((lw, bc) -> { assertEquals(lw.getBarcode(), bc); assertThat(lw.getSlots()).hasSize(2); assertEquals(lw.getFirstSlot().getAddress(), A1); @@ -183,7 +180,7 @@ public void testCreateNegative() { @Test public void testFindBySample() { Sample sample1 = EntityFactory.getSample(); - Sample sample2 = new Sample(sample1.getId() + 1, 100, sample1.getTissue(), sample1.getBioState()); + Sample sample2 = new Sample(sample1.getId() + 1, "100", sample1.getTissue(), sample1.getBioState()); LabwareType lt = EntityFactory.getTubeType(); LabwareType lt2 = EntityFactory.makeLabwareType(1, 2); @@ -220,9 +217,9 @@ public void testFindBySample() { @Test public void testCalculateLabelType() { Sample sample1 = EntityFactory.getSample(); - Sample sample2 = new Sample(sample1.getId() + 1, 100, sample1.getTissue(), sample1.getBioState()); - Sample sample3 = new Sample(sample1.getId() + 2, 100, sample1.getTissue(), sample1.getBioState()); - Sample sample4 = new Sample(sample1.getId() + 3, 100, sample1.getTissue(), sample1.getBioState()); + Sample sample2 = new Sample(sample1.getId() + 1, "100", sample1.getTissue(), sample1.getBioState()); + Sample sample3 = new Sample(sample1.getId() + 2, "100", sample1.getTissue(), sample1.getBioState()); + Sample sample4 = new Sample(sample1.getId() + 3, "100", sample1.getTissue(), sample1.getBioState()); LabelType slideLabel = new LabelType(51, "slide"); LabelType fourSlotLabel = new LabelType(50, "4slotslide"); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/OperationServiceTest.java b/src/test/java/uk/ac/sanger/sccp/stan/service/OperationServiceTest.java index 3243619ca..296baf9a8 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/OperationServiceTest.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/OperationServiceTest.java @@ -106,7 +106,7 @@ public void testCreateOperationFromActions(boolean withMutator) { if (withMutator) { List opStash = new ArrayList<>(1); op = opService.createOperation(opType, user, actions, null, opStash::add); - assertEquals(opStash.size(), 1); + assertEquals(1, opStash.size()); } else { op = opService.createOperation(opType, user, actions, null); } @@ -148,7 +148,7 @@ public void testCreateOperationInPlace() { OperationType opType = new OperationType(2, "Mash"); User user = EntityFactory.getUser(); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 2, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "2", sam1.getTissue(), sam1.getBioState()); int sam1id = sam1.getId(); int sam2id = sam2.getId(); LabwareType lt = EntityFactory.makeLabwareType(3,1); @@ -164,10 +164,10 @@ public void testCreateOperationInPlace() { assertNotNull(op.getId()); assertThat(savedOps).contains(op); assertThat(savedActions).hasSize(3); - assertEquals(op.getActions(), savedActions); - assertEquals(op.getOperationType(), opType); - assertEquals(op.getEquipment(), eq); - assertEquals(op.getPlanOperationId(), planId); + assertEquals(savedActions, op.getActions()); + assertEquals(opType, op.getOperationType()); + assertEquals(eq, op.getEquipment()); + assertEquals(planId, op.getPlanOperationId()); List> slotSampleIds = new ArrayList<>(3); for (Action ac : op.getActions()) { assertSame(ac.getSource(), ac.getDestination()); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestBlockProcessingService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestBlockProcessingService.java index 7a0c66259..958cee008 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestBlockProcessingService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestBlockProcessingService.java @@ -646,7 +646,7 @@ public void testCreateSamples() { TissueBlockRequest request = new TissueBlockRequest(List.of(block1, block2)); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(10, 20, sam1.getTissue(), bs); + Sample sam2 = new Sample(10, "20", sam1.getTissue(), bs); doReturn(sam1, sam2).when(service).createSample(any(), any(), any(), any()); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestCleanOutService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestCleanOutService.java index c121965c6..45f10f806 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestCleanOutService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestCleanOutService.java @@ -222,7 +222,7 @@ void testRecord() { Tissue tissue = EntityFactory.getTissue(); BioState bs = EntityFactory.getBioState(); List samples = IntStream.range(0,3) - .mapToObj(i -> new Sample(10+i, 20+i, tissue, bs)) + .mapToObj(i -> new Sample(10+i, String.valueOf(20+i), tissue, bs)) .toList(); Labware lw = EntityFactory.makeEmptyLabware(lt); final Address A2 = new Address(1,2), A3 = new Address(1,3); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestFindService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestFindService.java index c71531a88..620d4ea4b 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestFindService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestFindService.java @@ -186,7 +186,7 @@ public void testFindByLabwareBarcode(Labware lw) { static Stream findByLabwareBarcodeArgs() { Sample sample1 = EntityFactory.getSample(); - Sample sample2 = new Sample(sample1.getId()+1, 8, sample1.getTissue(), sample1.getBioState()); + Sample sample2 = new Sample(sample1.getId()+1, "8", sample1.getTissue(), sample1.getBioState()); LabwareType lt1 = EntityFactory.getTubeType(); Labware lwWithMultipleSamplesInOneSlot = EntityFactory.makeEmptyLabware(lt1); lwWithMultipleSamplesInOneSlot.getFirstSlot().getSamples().addAll(List.of(sample1, sample2)); @@ -215,9 +215,9 @@ public void testFindByTissueIds() { Sample[] samples = { new Sample(100, null, tissue1, bioState), - new Sample(101, 1, tissue1, bioState), - new Sample(102, 2, tissue2, bioState), - new Sample(103, 3, tissue3, bioState) + new Sample(101, "1", tissue1, bioState), + new Sample(102, "2", tissue2, bioState), + new Sample(103, "3", tissue3, bioState) }; LabwareType lt1 = EntityFactory.getTubeType(); LabwareType lt2 = EntityFactory.makeLabwareType(1, 2); @@ -387,7 +387,7 @@ static Stream filterArgs() { Donor donor2 = new Donor(null, "DONOR2", LifeStage.fetal, hamster); Tissue tissue2 = new Tissue(201, "TISSUE2", "4", sl2, donor2, tissue1.getMedium(), tissue1.getFixative(), null, tissue1.getHmdmc(), null, null); - Sample sample2 = new Sample(202, 2, tissue2, EntityFactory.getBioState()); + Sample sample2 = new Sample(202, "2", tissue2, EntityFactory.getBioState()); Project pr = new Project(1, "project", true); CostCode cc = new CostCode(1, "cc1"); @@ -457,7 +457,7 @@ public void testGetStoredItems() { LabwareType lt = EntityFactory.makeLabwareType(1, 2); final Tissue tissue = EntityFactory.getTissue(); final BioState bs = EntityFactory.getBioState(); - Sample[] samples = IntStream.range(0,2).mapToObj(i -> new Sample(10+i, 1+i, tissue, bs)).toArray(Sample[]::new); + Sample[] samples = IntStream.range(0,2).mapToObj(i -> new Sample(10+i, String.valueOf(1+i), tissue, bs)).toArray(Sample[]::new); Labware[] labware = IntStream.range(0,2).mapToObj(i -> EntityFactory.makeLabware(lt, samples)).toArray(Labware[]::new); List lss = Arrays.stream(samples).flatMap( sam -> Arrays.stream(labware).map(lw -> new LabwareSample(lw, sam, Set.of())) @@ -489,7 +489,7 @@ static Stream assembleResultArgs() { Tissue tissue = EntityFactory.getTissue(); BioState bs = EntityFactory.getBioState(); Sample[] samples = IntStream.range(0,2) - .mapToObj(i -> new Sample(10+i, 1+i, tissue, bs)) + .mapToObj(i -> new Sample(10+i, String.valueOf(1+i), tissue, bs)) .toArray(Sample[]::new); List lss = Arrays.stream(labware) .flatMap(lw -> Arrays.stream(samples) diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestLabwareValidator.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestLabwareValidator.java index 5f837dfe6..ff3c84923 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestLabwareValidator.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestLabwareValidator.java @@ -251,7 +251,7 @@ public void testValidateSingleSample() { testValidator(List.of(), action); LabwareType lt = EntityFactory.makeLabwareType(1, 2); Sample sample1 = EntityFactory.getSample(); - Sample sample2 = new Sample(sample1.getId()+1, 800, sample1.getTissue(), sample1.getBioState()); + Sample sample2 = new Sample(sample1.getId()+1, "800", sample1.getTissue(), sample1.getBioState()); Labware goodLw = EntityFactory.makeLabware(lt, sample1); Labware multiSlotLw = EntityFactory.makeLabware(lt, sample1, sample1); Labware multiSampleLw = EntityFactory.makeEmptyLabware(lt); @@ -269,7 +269,7 @@ public void testValidateBlock() { final Runnable action = validator::validateBlock; testValidator(List.of(), action); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 800, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "800", sam1.getTissue(), sam1.getBioState()); Labware goodLw = EntityFactory.makeBlock(sam1); Labware badLw = EntityFactory.makeLabware(EntityFactory.getTubeType(), sam2); @@ -285,7 +285,7 @@ public void testValidateOneFilledSlot() { testValidator(List.of(), action); LabwareType lt = EntityFactory.makeLabwareType(1, 2); Sample sample1 = EntityFactory.getSample(); - Sample sample2 = new Sample(sample1.getId()+1, 800, sample1.getTissue(), sample1.getBioState()); + Sample sample2 = new Sample(sample1.getId()+1, "800", sample1.getTissue(), sample1.getBioState()); Labware goodLw = EntityFactory.makeLabware(lt, sample1); goodLw.getFirstSlot().addSample(sample2); // Two samples in one slot Labware badLw1 = EntityFactory.makeLabware(lt, sample1, sample1); // One sample in two slots diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestOpWithSlotMeasurementsService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestOpWithSlotMeasurementsService.java index 8f49fc9a1..cbcae7622 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestOpWithSlotMeasurementsService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestOpWithSlotMeasurementsService.java @@ -601,7 +601,7 @@ public void testCreateMeasurements_empty() { public void testCreateMeasurements() { Integer opId = 7; Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 2, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "2", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(1,2); final Address A1 = new Address(1,1), A2 = new Address(1,2); Labware lw = EntityFactory.makeEmptyLabware(lt); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestParaffinProcessingService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestParaffinProcessingService.java index d08806966..93117e378 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestParaffinProcessingService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestParaffinProcessingService.java @@ -187,7 +187,7 @@ public void testCheckLabwareIsBlockish(boolean anyBad) { String expectedProblem; if (anyBad) { Sample otherSam = new Sample(105, null, tissue, bs); - samples[0].setSection(5); + samples[0].setSection("5"); labware.get(1).getFirstSlot().addSample(otherSam); labware.get(2).getFirstSlot().getSamples().clear(); labware.get(3).getSlot(new Address(1,2)).addSample(samples[3]); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestPermService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestPermService.java index 0db3ea5d7..5ae670fae 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestPermService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestPermService.java @@ -403,8 +403,8 @@ public void testRecord(boolean hasControlLabware) { public void testAddControl() { User user = EntityFactory.getUser(); Labware controlLw = EntityFactory.getTube(); - Sample sam1 = new Sample(500, 1, EntityFactory.getTissue(), EntityFactory.getBioState()); - Sample sam2 = new Sample(501, 2, sam1.getTissue(), sam1.getBioState()); + Sample sam1 = new Sample(500, "1", EntityFactory.getTissue(), EntityFactory.getBioState()); + Sample sam2 = new Sample(501, "2", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(2,2); Labware slide = EntityFactory.makeLabware(lt, sam1, sam2); @@ -430,7 +430,7 @@ public void testAddControl() { public void testCreateMeasurements() { LabwareType lt = EntityFactory.makeLabwareType(2,2); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 7, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "7", sam1.getTissue(), sam1.getBioState()); Labware lw = EntityFactory.makeLabware(lt, sam1, sam2, sam1); lw.getFirstSlot().getSamples().add(sam2); final Address A1 = new Address(1,1), A2 = new Address(1,2); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestReleaseService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestReleaseService.java index 3ab2ee08b..e54234e42 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestReleaseService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestReleaseService.java @@ -79,7 +79,7 @@ void setup() { mockWorkService = mock(WorkService.class); sample = EntityFactory.getSample(); - sample1 = new Sample(sample.getId()+1, 7, sample.getTissue(), EntityFactory.getBioState()); + sample1 = new Sample(sample.getId()+1, "7", sample.getTissue(), EntityFactory.getBioState()); labwareType = EntityFactory.makeLabwareType(1,4); otherRecs = List.of(new ReleaseRecipient(7, "ford")); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestResultService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestResultService.java index e718c7ae4..0bc88ece5 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestResultService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestResultService.java @@ -690,7 +690,7 @@ public void testMakeLabwareOpMap() { @Test public void testCreateResults() { Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 10, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "10", sam1.getTissue(), sam1.getBioState()); int sam1id = sam1.getId(); int sam2id = sam2.getId(); @@ -782,8 +782,8 @@ public void testMakeMeasurements() { final Address A2 = new Address(1,2); LabwareType lt = EntityFactory.makeLabwareType(1,4); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 10, sam1.getTissue(), sam1.getBioState()); - Sample sam3 = new Sample(sam1.getId()+2, 11, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "10", sam1.getTissue(), sam1.getBioState()); + Sample sam3 = new Sample(sam1.getId()+2, "11", sam1.getTissue(), sam1.getBioState()); Labware lw = EntityFactory.makeLabware(lt, sam1, sam3, sam1); lw.getSlot(A1).addSample(sam2); List sms = List.of( diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestSampleProcessingService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestSampleProcessingService.java index 249dc6be5..083f2bbb1 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestSampleProcessingService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestSampleProcessingService.java @@ -1,25 +1,19 @@ package uk.ac.sanger.sccp.stan.service; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import uk.ac.sanger.sccp.stan.EntityFactory; import uk.ac.sanger.sccp.stan.model.*; import uk.ac.sanger.sccp.stan.repo.*; import uk.ac.sanger.sccp.stan.request.AddExternalIDRequest; import uk.ac.sanger.sccp.stan.request.OperationResult; +import java.util.*; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; import static uk.ac.sanger.sccp.stan.Matchers.assertValidationException; -import static org.assertj.core.api.Assertions.assertThat; /** * Tests {@link SampleProcessingServiceImp} @@ -52,7 +46,7 @@ public void testValidAddExternalId() { SpatialLocation sl = EntityFactory.getSpatialLocation(); Tissue tissue = EntityFactory.makeTissue(donor, sl); tissue.setExternalName(""); - Sample sample = new Sample(1, 100, tissue, null); + Sample sample = new Sample(1, "100", tissue, null); LabwareType lt = EntityFactory.makeLabwareType(1,1, "LT1"); Labware lw = EntityFactory.makeLabware(lt, sample); OperationType opType = EntityFactory.makeOperationType("Add External ID", null); @@ -77,7 +71,7 @@ public void testInvalidAddExternalId() { Donor donor = EntityFactory.getDonor(); SpatialLocation sl = EntityFactory.getSpatialLocation(); Tissue tissue = EntityFactory.makeTissue(donor, sl); - Sample sample = new Sample(1, 100, tissue, null); + Sample sample = new Sample(1, "100", tissue, null); LabwareType lt = EntityFactory.makeLabwareType(1,1, "LT1"); Labware lw = EntityFactory.makeLabware(lt, sample); @@ -124,8 +118,8 @@ public void testTooManySamplesValidation() { Donor donor = EntityFactory.getDonor(); SpatialLocation sl = EntityFactory.getSpatialLocation(); Tissue tissue = EntityFactory.makeTissue(donor, sl); - Sample sample1 = new Sample(1, 100, tissue, null); - Sample sample2 = new Sample(2, 100, tissue, null); + Sample sample1 = new Sample(1, "100", tissue, null); + Sample sample2 = new Sample(2, "100", tissue, null); sampleProcessingService.validateSamples(problems, Set.of(sample1, sample2)); assertThat(problems).contains("There are too many samples associated with this labware"); @@ -137,7 +131,7 @@ public void testExistingExternalIdSamplesValidation() { Donor donor = EntityFactory.getDonor(); SpatialLocation sl = EntityFactory.getSpatialLocation(); Tissue tissue = EntityFactory.makeTissue(donor, sl); - Sample sample1 = new Sample(1, 100, tissue, null); + Sample sample1 = new Sample(1, "100", tissue, null); sampleProcessingService.validateSamples(problems, Set.of(sample1)); assertThat(problems).contains("The associated tissue already has an external identifier: "+tissue.getExternalName()); @@ -151,7 +145,7 @@ public void testNoReplicateSamplesValidation() { Tissue tissue = EntityFactory.makeTissue(donor, sl); tissue.setReplicate(""); tissue.setExternalName(""); - Sample sample1 = new Sample(1, 100, tissue, null); + Sample sample1 = new Sample(1, "100", tissue, null); sampleProcessingService.validateSamples(problems, Set.of(sample1)); assertThat(problems).contains("The associated tissue does not have a replicate number"); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestSlotCopyService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestSlotCopyService.java index 85651c365..ae0506bc3 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestSlotCopyService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestSlotCopyService.java @@ -94,7 +94,7 @@ private List makeSourceSamples(BioState bioState) { if (sourceSamples==null) { Tissue tissue = EntityFactory.getTissue(); sourceSamples = IntStream.of(1, 2, 3) - .mapToObj(i -> new Sample(10 + i, i, tissue, bioState)) + .mapToObj(i -> new Sample(10 + i, String.valueOf(i), tissue, bioState)) .collect(toList()); } return sourceSamples; @@ -391,8 +391,8 @@ public void testCreateSamples(boolean changeBioState) { BioState newBioState = changeBioState ? cdna : null; Tissue tissue1 = EntityFactory.getTissue(); Tissue tissue2 = EntityFactory.makeTissue(tissue1.getDonor(), tissue1.getSpatialLocation()); - Sample tissueSample = new Sample(1, 1, tissue1, tissue); - Sample cdnaSample = new Sample(2, 2, tissue2, cdna); + Sample tissueSample = new Sample(1, "1", tissue1, tissue); + Sample cdnaSample = new Sample(2, "2", tissue2, cdna); final Address A1 = new Address(1,1); final Address B1 = new Address(2,1); final Address C1 = new Address(3,1); @@ -467,7 +467,7 @@ public void testFillLabware() { @Test public void testCreateOperation() { UCMap lwMap = makeLabwareMap(); - Sample newSample = new Sample(500, 3, EntityFactory.getTissue(), cdna); + Sample newSample = new Sample(500, "3", EntityFactory.getTissue(), cdna); final Address A1 = new Address(1,1); final Address B1 = new Address(2,1); final Address A2 = new Address(1,2); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestSnapshotService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestSnapshotService.java index d1b832a81..e4e175984 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestSnapshotService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestSnapshotService.java @@ -38,7 +38,7 @@ public void testCreateSnapshot() { LabwareType lt = EntityFactory.makeLabwareType(1, 2); Labware labware = EntityFactory.makeEmptyLabware(lt); Sample sample1 = EntityFactory.getSample(); - Sample sample2 = new Sample(sample1.getId()+1, 8, sample1.getTissue(), sample1.getBioState()); + Sample sample2 = new Sample(sample1.getId()+1, "8", sample1.getTissue(), sample1.getBioState()); final Slot slot1 = labware.getFirstSlot(); slot1.getSamples().addAll(List.of(sample1, sample2)); final Slot slot2 = labware.getSlots().get(1); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestStainService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestStainService.java index c9ad13d94..aef8d784f 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestStainService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestStainService.java @@ -200,7 +200,7 @@ public void testCreateOperation() { OperationType opType = new OperationType(6, "Stain"); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 17, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "17", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(4,1); Labware lw = EntityFactory.makeLabware(lt, sam1, sam1, sam2, null); lw.getFirstSlot().setSamples(List.of(sam1, sam2)); @@ -277,7 +277,7 @@ public void testRecordComments() { List comments = List.of(new Comment(1, "com1", "cat1"), new Comment(2, "com2", "cat2")); Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 17, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "17", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(1, 2); Labware lw1 = EntityFactory.makeLabware(lt, sam1, sam2); int slot1id1 = lw1.getFirstSlot().getId(); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/TestVisiumAnalysisService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/TestVisiumAnalysisService.java index ef6a7df9d..80f6cc5a6 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/TestVisiumAnalysisService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/TestVisiumAnalysisService.java @@ -217,7 +217,7 @@ public void testRecordAnalysis(boolean withWork) { @Test public void testCreateMeasurements() { Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 17, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "17", sam1.getTissue(), sam1.getBioState()); Slot slot = EntityFactory.makeEmptyLabware(EntityFactory.getTubeType()).getFirstSlot(); slot.setSamples(List.of(sam1, sam2)); String value = "240"; diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/analysis/TestRnaAnalysisService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/analysis/TestRnaAnalysisService.java index 475907168..4da25f057 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/analysis/TestRnaAnalysisService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/analysis/TestRnaAnalysisService.java @@ -398,7 +398,7 @@ public void testRecordAnalysisDetailed() { @Test public void testAddMeasurements() { Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId() + 1, 6, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId() + 1, "6", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(1, 3); Labware lw = EntityFactory.makeLabware(lt, sam1, sam2); lw.getFirstSlot().getSamples().add(sam2); @@ -429,7 +429,7 @@ public void testAddMeasurements() { @Test public void testAddOpComs() { Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId() + 1, 6, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId() + 1, "6", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(1, 3); Labware lw = EntityFactory.makeLabware(lt, sam1, sam2); lw.getFirstSlot().getSamples().add(sam2); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/cytassistoverview/TestCytassistOverviewDataCompiler.java b/src/test/java/uk/ac/sanger/sccp/stan/service/cytassistoverview/TestCytassistOverviewDataCompiler.java index 24c75fd18..6e4f93469 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/cytassistoverview/TestCytassistOverviewDataCompiler.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/cytassistoverview/TestCytassistOverviewDataCompiler.java @@ -331,7 +331,7 @@ void testFillCytassistData() { }).toList(); dataCompiler.fillCytassistData(data); CytassistOverview row = data.getFirst().row; - assertEquals(1, row.getSection()); + assertEquals("1", row.getSection()); assertEquals(lws[0].getBarcode(), row.getSourceBarcode()); assertEquals(lws[1].getBarcode(), row.getCytassistBarcode()); assertEquals("A1", row.getSourceSlotAddress()); @@ -342,7 +342,7 @@ void testFillCytassistData() { assertEquals(lts[1].getName(), row.getCytassistLabwareType()); assertEquals(opTimes[0], row.getCytassistPerformed()); row = data.get(1).row; - assertEquals(1, row.getSection()); + assertEquals("1", row.getSection()); assertEquals(lws[2].getBarcode(), row.getSourceBarcode()); assertEquals(lws[3].getBarcode(), row.getCytassistBarcode()); assertEquals("A2", row.getSourceSlotAddress()); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/extract/TestExtractService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/extract/TestExtractService.java index e1d951ba3..c8ada6a42 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/extract/TestExtractService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/extract/TestExtractService.java @@ -256,7 +256,7 @@ public void testCreateSamples() { BioState tissueBioState = new BioState(1, "Tissue"); Sample[] sourceSamples = { new Sample(1, null, tissue, tissueBioState), - new Sample(2, 3, tissue, tissueBioState), + new Sample(2, "3", tissue, tissueBioState), new Sample(3, null, tissue, rnaBioState), }; @@ -308,7 +308,7 @@ public void testCreateOperations() { BioState tissueBioState = new BioState(1, "Tissue"); Tissue tissue = EntityFactory.getTissue(); Sample[] srcSamples = IntStream.range(0,2) - .mapToObj(i -> new Sample(i+1, i+2, tissue, tissueBioState)) + .mapToObj(i -> new Sample(i+1, String.valueOf(i+2), tissue, tissueBioState)) .toArray(Sample[]::new); Sample[] dstSamples = Arrays.stream(srcSamples) .map(ss -> new Sample(10+ss.getId(), ss.getSection(), tissue, rnaBioState)) diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/graph/TestGraphService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/graph/TestGraphService.java index a523495b1..26b2ba790 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/graph/TestGraphService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/graph/TestGraphService.java @@ -134,7 +134,7 @@ void testCreateNode() { Map lwMap = Map.of(lw.getId(), lw); Tissue tis = EntityFactory.getTissue(); BioState bs = EntityFactory.getBioState(); - List samples = IntStream.rangeClosed(1,2).mapToObj(i -> new Sample(10+i, i, tis, bs)).toList(); + List samples = IntStream.rangeClosed(1,2).mapToObj(i -> new Sample(10+i, String.valueOf(i), tis, bs)).toList(); Map sampleMap = samples.stream().collect(inMap(Sample::getId)); Sample sample = samples.getFirst(); HistoryEntry entry = new HistoryEntry(10, "eventname", LocalDateTime.of(2024,3,11,12,0), -5, lw.getId(), @@ -261,12 +261,12 @@ void testCompileNodeData() { "2,1,null,3,2:BS; s1-3" }, delimiter=':') void testDescribeBio(String secString, String expected) { - List secs; + List secs; if (secString==null) { secs = List.of(); } else { secs = Arrays.stream(secString.split(",")) - .map(s -> s.equals("null") ? null : Integer.valueOf(s)) + .map(s -> s.equals("null") ? null : s) .toList(); } BioState bs = new BioState(10, "BS"); @@ -283,15 +283,15 @@ void testDescribeBio(String secString, String expected) { "2;2", "2 3; 2,3", "2 3 4; 2-4", + "2 3a 4; 2,3a,4", "2 3 4 6; 2,3,4,6", }, delimiter = ';') void testSummariseSections(String secString, String expected) { - List secs; + List secs; if (secString==null) { secs = List.of(); } else { secs = Arrays.stream(secString.split("\\s+")) - .map(Integer::valueOf) .toList(); } assertEquals(expected, service.summariseSections(secs)); @@ -322,7 +322,7 @@ void testCreateLinks() { NodeData regNd = makeNodeData(1, makeTime(1), lw1.getId(), lw1.getId(), regSs, regSs); List sections = IntStream.rangeClosed(1,2) - .mapToObj(i -> new Sample(10+i, i, tis, bs)) + .mapToObj(i -> new Sample(10+i, String.valueOf(i), tis, bs)) .toList(); List secLw = sections.stream() @@ -334,7 +334,7 @@ void testCreateLinks() { regSs, Set.of(new SlotSample(secLw.get(i).getFirstSlot(), sections.get(i))))) .toList(); - Sample extractSample = new Sample(20, 2, tis, bs); + Sample extractSample = new Sample(20, String.valueOf(2), tis, bs); Labware extractLw = EntityFactory.makeLabware(lt1, extractSample); NodeData extractNd = makeNodeData(5, makeTime(3), secLw.getLast().getId(), extractLw.getId(), Set.of(new SlotSample(secLw.getLast().getFirstSlot(), sections.getLast())), diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/history/TestHistoryService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/history/TestHistoryService.java index eeca62f6a..0dcd3a318 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/history/TestHistoryService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/history/TestHistoryService.java @@ -116,7 +116,7 @@ public void testGetHistoryForSampleId() { History history = new History(); Sample sample = EntityFactory.getSample(); when(mockSampleRepo.findById(sample.getId())).thenReturn(Optional.of(sample)); - Sample sample2 = new Sample(sample.getId()+1, 10, sample.getTissue(), sample.getBioState()); + Sample sample2 = new Sample(sample.getId()+1, "10", sample.getTissue(), sample.getBioState()); List samples = List.of(sample, sample2); when(mockSampleRepo.findAllByTissueIdIn(List.of(sample.getTissue().getId()))).thenReturn(samples); doReturn(history).when(service).getHistoryForSamples(samples); @@ -140,7 +140,7 @@ public void testGetHistoryForExternalName(boolean wildcard) { } else { when(mockTissueRepo.getAllByExternalName(tissue.getExternalName())).thenReturn(List.of(tissue)); } - Sample sample2 = new Sample(sample.getId()+1, 10, sample.getTissue(), sample.getBioState()); + Sample sample2 = new Sample(sample.getId()+1, "10", sample.getTissue(), sample.getBioState()); List samples = List.of(sample, sample2); when(mockSampleRepo.findAllByTissueIdIn(List.of(tissue.getId()))).thenReturn(samples); doReturn(history).when(service).getHistoryForSamples(samples); @@ -157,7 +157,7 @@ public void testGetHistoryForDonorName() { Tissue tissue2 = EntityFactory.makeTissue(donor, EntityFactory.getSpatialLocation()); when(mockTissueRepo.findByDonorId(donor.getId())).thenReturn(List.of(tissue, tissue2)); when(mockDonorRepo.getByDonorName(donor.getDonorName())).thenReturn(donor); - Sample sample2 = new Sample(sample.getId()+1, 10, tissue2, sample.getBioState()); + Sample sample2 = new Sample(sample.getId()+1, "10", tissue2, sample.getBioState()); List samples = List.of(sample, sample2); when(mockSampleRepo.findAllByTissueIdIn(List.of(tissue.getId(), tissue2.getId()))).thenReturn(samples); doReturn(history).when(service).getHistoryForSamples(samples); @@ -171,8 +171,8 @@ public void testGetHistoryForLabwareBarcode() { Sample sample = EntityFactory.getSample(); Tissue tissue = sample.getTissue(); Tissue tissue2 = EntityFactory.makeTissue(tissue.getDonor(), EntityFactory.getSpatialLocation()); - Sample sample2 = new Sample(sample.getId()+1, 10, tissue2, sample.getBioState()); - Sample sample3 = new Sample(sample2.getId()+1, 11, tissue2, sample.getBioState()); + Sample sample2 = new Sample(sample.getId()+1, "10", tissue2, sample.getBioState()); + Sample sample3 = new Sample(sample2.getId()+1, "11", tissue2, sample.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(1,2); Labware lw = EntityFactory.makeLabware(lt, sample, sample2); when(mockLwRepo.getByBarcode(lw.getBarcode())).thenReturn(lw); @@ -348,7 +348,7 @@ public void testReferencesSamples() { Tissue tissue = EntityFactory.getTissue(); BioState bs = EntityFactory.getBioState(); Sample[] samples = IntStream.range(1, 7) - .mapToObj(i -> new Sample(i, 10+i, tissue, bs)) + .mapToObj(i -> new Sample(i, String.valueOf(10+i), tissue, bs)) .toArray(Sample[]::new); Labware lw1 = EntityFactory.makeEmptyLabware(lt); lw1.getFirstSlot().getSamples().addAll(List.of(samples[0], samples[1])); @@ -519,7 +519,7 @@ public void testSamplesForBarcode() { Donor donor = new Donor(i, "donor"+i, null, null); Tissue tissue = EntityFactory.makeTissue(donor, null); tissue.setId(10+i); - return new Sample(100+i, i, tissue, null); + return new Sample(100+i, String.valueOf(i), tissue, null); }) .toArray(Sample[]::new); LabwareType lt = EntityFactory.makeLabwareType(1, 2); @@ -742,7 +742,7 @@ public void testExternalNameTissuePredicate(String inputs, String goods, String @Test public void testGetHistoryForSamples() { Sample sample = EntityFactory.getSample(); - Sample sample2 = new Sample(sample.getId() + 1, 10, sample.getTissue(), sample.getBioState()); + Sample sample2 = new Sample(sample.getId() + 1, "10", sample.getTissue(), sample.getBioState()); List samples = List.of(sample, sample2); Set sampleIds = Set.of(sample.getId(), sample2.getId()); List ops = List.of(new Operation(100, null, null, null, null)); @@ -868,7 +868,7 @@ private void createSamples() { samples = new Sample[3]; samples[0] = sample; for (int i = 1; i < samples.length; ++i) { - samples[i] = new Sample(sample.getId()+i, 10+i, sample.getTissue(), sample.getBioState()); + samples[i] = new Sample(sample.getId()+i, String.valueOf(10+i), sample.getTissue(), sample.getBioState()); } } } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelData.java b/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelData.java index 4c55710bd..1c4d1e8b8 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelData.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelData.java @@ -17,8 +17,8 @@ public void testFields() { LabwareLabelData data = new LabwareLabelData( "STAN-123", "123456", "Butter", "2021-03-17", List.of( - new LabelContent("DONOR1", null, "TISSUE1", "1", (String) null), - new LabelContent("DONOR2", null, "TISSUE2", "2a", 3) + new LabelContent("DONOR1", null, "TISSUE1", "1", null), + LabelContent.ofSection("DONOR2", null, "TISSUE2", "2a", "3") ) ); Map fields = data.getFields(); @@ -33,7 +33,7 @@ public void testFields() { expected.put("donor[1]", "DONOR2"); expected.put("tissue[1]", "TISSUE2"); expected.put("replicate[1]", "R:2a"); - expected.put("state[1]", "S003"); + expected.put("state[1]", "S3"); assertThat(fields).containsExactlyInAnyOrderEntriesOf(expected); } } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelDataService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelDataService.java index 5ec24578b..cbd0459bc 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelDataService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/label/TestLabwareLabelDataService.java @@ -49,7 +49,7 @@ public void testLabwareData() { Tissue tissue = EntityFactory.makeTissue(EntityFactory.getDonor(), sl); BioState bioState = EntityFactory.getBioState(); Sample sample1 = new Sample(null, null, tissue, bioState); - Sample sample2 = new Sample(null, 5, tissue, bioState); + Sample sample2 = new Sample(null, "5", tissue, bioState); Labware lw = EntityFactory.makeEmptyLabware(EntityFactory.makeLabwareType(1, 2)); lw.setCreated(LocalDateTime.of(2021,3,17,15,44)); lw.getSlots().get(1).getSamples().addAll(List.of(sample1, sample2)); @@ -58,7 +58,7 @@ public void testLabwareData() { LabwareLabelData actual = service.getLabelData(lw); List expectedContents = Stream.of(sample1, sample2) - .map(sam -> new LabelContent(sam.getTissue().getDonor().getDonorName(), sam.getTissue().getExternalName(), + .map(sam -> LabelContent.ofSection(sam.getTissue().getDonor().getDonorName(), sam.getTissue().getExternalName(), tissueString(sam.getTissue()), sam.getTissue().getReplicate(), sam.getSection())) .collect(toList()); LabwareLabelData expected = new LabwareLabelData(lw.getBarcode(), lw.getExternalBarcode(), tissue.getMedium().getName(), "2021-03-17", expectedContents, @@ -83,26 +83,26 @@ public void testLabwareDataPlannedContents() { Tissue tissue2 = EntityFactory.makeTissue(donor2, sl2); BioState bioState = EntityFactory.getBioState(); Sample sample1 = new Sample(null, null, tissue1, bioState); - Sample sample2 = new Sample(null, 5, tissue2, bioState); + Sample sample2 = new Sample(null, "5", tissue2, bioState); Labware labware = EntityFactory.makeEmptyLabware(EntityFactory.makeLabwareType(1, 4)); labware.setCreated(LocalDateTime.of(2021,3,17,15,45)); labware.setExternalBarcode("123456"); List slots = labware.getSlots(); final int planId = 400; List planActions = List.of( - new PlanAction(404, planId, slots.get(3), slots.get(3), sample2, 14, null, null), + new PlanAction(404, planId, slots.get(3), slots.get(3), sample2, "14", null, null), new PlanAction(403, planId, slots.get(2), slots.get(2), sample2, null, null, null), new PlanAction(401, planId, slots.get(0), slots.get(0), sample1, null, null, null), - new PlanAction(402, planId, slots.get(1), slots.get(1), sample1, 7, null, null) + new PlanAction(402, planId, slots.get(1), slots.get(1), sample1, "7", null, null) ); when(mockPlanActionRepo.findAllByDestinationLabwareId(labware.getId())).thenReturn(planActions); LabwareLabelData actual = service.getLabelData(labware); List expectedContents = List.of( - new LabelContent(donor1.getDonorName(), tissue1.getExternalName(), tissueString(tissue1), tissue1.getReplicate(), (String) null), - new LabelContent(donor1.getDonorName(), tissue1.getExternalName(), tissueString(tissue1), tissue1.getReplicate(), 7), - new LabelContent(donor2.getDonorName(), tissue2.getExternalName(), tissueString(tissue2), tissue2.getReplicate(), 5), - new LabelContent(donor2.getDonorName(), tissue2.getExternalName(), tissueString(tissue2), tissue2.getReplicate(), 14) + new LabelContent(donor1.getDonorName(), tissue1.getExternalName(), tissueString(tissue1), tissue1.getReplicate(), null), + LabelContent.ofSection(donor1.getDonorName(), tissue1.getExternalName(), tissueString(tissue1), tissue1.getReplicate(), "7"), + LabelContent.ofSection(donor2.getDonorName(), tissue2.getExternalName(), tissueString(tissue2), tissue2.getReplicate(), "5"), + LabelContent.ofSection(donor2.getDonorName(), tissue2.getExternalName(), tissueString(tissue2), tissue2.getReplicate(), "14") ); assertEquals(new LabwareLabelData(labware.getBarcode(), labware.getExternalBarcode(), tissue1.getMedium().getName(), "2021-03-17", expectedContents), actual); } @@ -153,7 +153,7 @@ public void testXeniumPlannedContents() { Tissue tissue3 = EntityFactory.makeTissue(donor3, sl3); BioState bs = EntityFactory.getBioState(); Sample sample1 = new Sample(null, null, tissue1, bs); - Sample sample2 = new Sample(null, 12, tissue2, bs); + Sample sample2 = new Sample(null, "12", tissue2, bs); Sample sample3 = new Sample(null, null, tissue3, bs); Labware lw = EntityFactory.makeEmptyLabware(new LabwareType(100, LabwareType.XENIUM_NAME, 5, 3, EntityFactory.getLabelType(), false)); @@ -164,16 +164,16 @@ public void testXeniumPlannedContents() { Slot A2 = lw.getSlot(new Address(1,2)); Slot B1 = lw.getSlot(new Address(2,1)); List planActions = List.of( - new PlanAction(403, planId, B1, B1, sample3, 21, null, null), + new PlanAction(403, planId, B1, B1, sample3, "21", null, null), new PlanAction(402, planId, A2, A2, sample2, null, null, null), - new PlanAction(401, planId, A1, A1, sample1, 11, null, null) + new PlanAction(401, planId, A1, A1, sample1, "11", null, null) ); when(mockPlanActionRepo.findAllByDestinationLabwareId(lw.getId())).thenReturn(planActions); LabwareLabelData actual = service.getLabelData(lw); List expectedContents = List.of( - new LabelContent("DONOR1", tissue1.getExternalName(), tissueString(tissue1), tissue1.getReplicate(), 11), - new LabelContent("DONOR3", tissue3.getExternalName(), tissueString(tissue3), tissue3.getReplicate(), 21), - new LabelContent("DONOR2", tissue2.getExternalName(), tissueString(tissue2), tissue2.getReplicate(), 12) + LabelContent.ofSection("DONOR1", tissue1.getExternalName(), tissueString(tissue1), tissue1.getReplicate(), "11"), + LabelContent.ofSection("DONOR3", tissue3.getExternalName(), tissueString(tissue3), tissue3.getReplicate(), "21"), + LabelContent.ofSection("DONOR2", tissue2.getExternalName(), tissueString(tissue2), tissue2.getReplicate(), "12") ); assertEquals(new LabwareLabelData(lw.getBarcode(), lw.getExternalBarcode(), tissue1.getMedium().getName(), "2023-07-13", expectedContents), actual); @@ -210,14 +210,14 @@ public void testAddressToSimpleContent_populated() { SpatialLocation sl = EntityFactory.getSpatialLocation(); BioState bs = EntityFactory.getBioState(); Tissue[] tissues = IntStream.range(0,3).mapToObj(i -> EntityFactory.makeTissue(donor, sl)).toArray(Tissue[]::new); - Sample[] samples = IntStream.range(0,3).mapToObj(i -> new Sample(10+i, 20+i, tissues[i], bs)).toArray(Sample[]::new); + Sample[] samples = IntStream.range(0,3).mapToObj(i -> new Sample(10+i, String.valueOf(20+i), tissues[i], bs)).toArray(Sample[]::new); final Address A1 = new Address(1,1), A2 = new Address(1,2); lw.getSlot(A1).getSamples().addAll(List.of(samples[0], samples[1])); lw.getSlot(A2).getSamples().add(samples[2]); Map> expected = Map.of( - A1, List.of(new SimpleContent(tissues[0], 20), new SimpleContent(tissues[1], 21)), - A2, List.of(new SimpleContent(tissues[2], 22)) + A1, List.of(new SimpleContent(tissues[0], "20"), new SimpleContent(tissues[1], "21")), + A2, List.of(new SimpleContent(tissues[2], "22")) ); assertEquals(expected, service.addressToSimpleContent(lw)); } @@ -238,26 +238,26 @@ public void testAddressToSimpleContent_planned() { SpatialLocation sl = EntityFactory.getSpatialLocation(); BioState bs = EntityFactory.getBioState(); Tissue[] tissues = IntStream.range(0, 3).mapToObj(i -> EntityFactory.makeTissue(donor, sl)).toArray(Tissue[]::new); - Sample[] samples = IntStream.range(0, 3).mapToObj(i -> new Sample(10 + i, 20 + i, tissues[i], bs)).toArray(Sample[]::new); + Sample[] samples = IntStream.range(0, 3).mapToObj(i -> new Sample(10 + i, String.valueOf(20 + i), tissues[i], bs)).toArray(Sample[]::new); final Address A1 = new Address(1, 1), A2 = new Address(1, 2); Slot source = lw.getFirstSlot(); List planActions = List.of( new PlanAction(20, 1, source, lw.getSlot(A1), samples[0]), - new PlanAction(21, 1, source, lw.getSlot(A1), samples[1], 400, null, null), + new PlanAction(21, 1, source, lw.getSlot(A1), samples[1], "400", null, null), new PlanAction(22, 1, source, lw.getSlot(A2), samples[2]) ); when(mockPlanActionRepo.findAllByDestinationLabwareId(lw.getId())).thenReturn(planActions); Map> expected = Map.of( - A1, List.of(new SimpleContent(tissues[0], 20), new SimpleContent(tissues[1], 400)), - A2, List.of(new SimpleContent(tissues[2], 22)) + A1, List.of(new SimpleContent(tissues[0], "20"), new SimpleContent(tissues[1], "400")), + A2, List.of(new SimpleContent(tissues[2], "22")) ); assertEquals(expected, service.addressToSimpleContent(lw)); } @ParameterizedTest @MethodSource("sectionRangeArgs") - public void testSectionRange(List scs, Integer min, Integer max) { - Integer[] result = service.sectionRange(scs); + public void testSectionRange(List scs, String min, String max) { + String[] result = service.sectionRange(scs); assertThat(result).hasSize(2); assertEquals(min, result[0]); assertEquals(max, result[1]); @@ -265,12 +265,12 @@ public void testSectionRange(List scs, Integer min, Integer max) static Stream sectionRangeArgs() { Tissue tissue = EntityFactory.getTissue(); - return Arrays.stream(new Integer[][] { + return Arrays.stream(new String[][] { { null, null }, { null, null, null }, - { 1, 1, 1 }, - { 1, null, 1, 1 }, - { 3, 2, 6, 4, 2, 6 }, + { "1", "1", "1" }, + { "1", null, "1", "1" }, + { "3", "2", "6", "4", "2", "6" }, }).map(arr -> { final int len = arr.length; List scs = Arrays.stream(arr, 0, len-2) @@ -287,10 +287,10 @@ public void testCheckRowBasedLayout_valid() { Labware lw = EntityFactory.makeEmptyLabware(makeAdhLabwareType()); Tissue[] tissues = IntStream.range(0,4).mapToObj(i -> EntityFactory.makeTissue(donor, sl)).toArray(Tissue[]::new); Map> scs = Map.of( - new Address(1,1), List.of(new SimpleContent(tissues[0], 1), new SimpleContent(tissues[0], 2)), - new Address(2,2), List.of(new SimpleContent(tissues[1], 3)), - new Address(3,1), List.of(new SimpleContent(tissues[2], 4)), - new Address(4,2), List.of(new SimpleContent(tissues[3], 5)) + new Address(1,1), List.of(new SimpleContent(tissues[0], "1"), new SimpleContent(tissues[0], "2")), + new Address(2,2), List.of(new SimpleContent(tissues[1], "3")), + new Address(3,1), List.of(new SimpleContent(tissues[2], "4")), + new Address(4,2), List.of(new SimpleContent(tissues[3], "5")) ); assertArrayEquals(tissues, service.checkRowBasedLayout(lw, scs)); } @@ -302,10 +302,10 @@ public void testRowBasedLayout_invalid() { Labware lw = EntityFactory.makeEmptyLabware(makeAdhLabwareType()); Tissue[] tissues = IntStream.range(0,4).mapToObj(i -> EntityFactory.makeTissue(donor, sl)).toArray(Tissue[]::new); Map> scs = Map.of( - new Address(1,1), List.of(new SimpleContent(tissues[0], 1), new SimpleContent(tissues[0], 2)), - new Address(2,2), List.of(new SimpleContent(tissues[1], 3)), - new Address(3,1), List.of(new SimpleContent(tissues[2], 4)), - new Address(4,2), List.of(new SimpleContent(tissues[3], 5), new SimpleContent(tissues[2], 6)) + new Address(1,1), List.of(new SimpleContent(tissues[0], "1"), new SimpleContent(tissues[0], "2")), + new Address(2,2), List.of(new SimpleContent(tissues[1], "3")), + new Address(3,1), List.of(new SimpleContent(tissues[2], "4")), + new Address(4,2), List.of(new SimpleContent(tissues[3], "5"), new SimpleContent(tissues[2], "6")) ); assertThat(assertThrows(IllegalArgumentException.class, () -> service.checkRowBasedLayout(lw, scs))) @@ -320,10 +320,10 @@ public void testCheckDividedLayout_valid() { Labware lw = EntityFactory.makeEmptyLabware(makeAdhLabwareType()); Tissue[] tissues = IntStream.range(0,2).mapToObj(i -> EntityFactory.makeTissue(donor, sl)).toArray(Tissue[]::new); Map> scs = Map.of( - new Address(1,1), List.of(new SimpleContent(tissues[0], 1), new SimpleContent(tissues[0], 2)), - new Address(2,2), List.of(new SimpleContent(tissues[0], 3)), - new Address(3,1), List.of(new SimpleContent(tissues[1], 4)), - new Address(4,2), List.of(new SimpleContent(tissues[1], 5)) + new Address(1,1), List.of(new SimpleContent(tissues[0], "1"), new SimpleContent(tissues[0], "2")), + new Address(2,2), List.of(new SimpleContent(tissues[0], "3")), + new Address(3,1), List.of(new SimpleContent(tissues[1], "4")), + new Address(4,2), List.of(new SimpleContent(tissues[1], "5")) ); assertArrayEquals(tissues, service.checkDividedLayout(lw, scs)); } @@ -335,10 +335,10 @@ public void testCheckDividedLayout_invalid() { Labware lw = EntityFactory.makeEmptyLabware(makeAdhLabwareType()); Tissue[] tissues = IntStream.range(0,2).mapToObj(i -> EntityFactory.makeTissue(donor, sl)).toArray(Tissue[]::new); Map> scs = Map.of( - new Address(1,1), List.of(new SimpleContent(tissues[0], 1), new SimpleContent(tissues[0], 2)), - new Address(2,2), List.of(new SimpleContent(tissues[0], 3)), - new Address(3,1), List.of(new SimpleContent(tissues[1], 4)), - new Address(4,2), List.of(new SimpleContent(tissues[0], 5)) + new Address(1,1), List.of(new SimpleContent(tissues[0], "1"), new SimpleContent(tissues[0], "2")), + new Address(2,2), List.of(new SimpleContent(tissues[0], "3")), + new Address(3,1), List.of(new SimpleContent(tissues[1], "4")), + new Address(4,2), List.of(new SimpleContent(tissues[0], "5")) ); assertThat(assertThrows(IllegalArgumentException.class, () -> service.checkDividedLayout(lw, scs))) @@ -394,10 +394,10 @@ public void testGetRowBasedLabelData_valid(boolean sameMedium) { tissues[1].setMedium(new Medium(50, "bananas")); } Map> scs = Map.of( - A1, List.of(new SimpleContent(tissues[0], 1), new SimpleContent(tissues[0], 2)), - A2, List.of(new SimpleContent(tissues[0], 1)), - B1, List.of(new SimpleContent(tissues[1], 3), new SimpleContent(tissues[1], 3)), - D2, List.of(new SimpleContent(tissues[3], 6), new SimpleContent(tissues[3], 5)) + A1, List.of(new SimpleContent(tissues[0], "1"), new SimpleContent(tissues[0], "2")), + A2, List.of(new SimpleContent(tissues[0], "1")), + B1, List.of(new SimpleContent(tissues[1], "3"), new SimpleContent(tissues[1], "3")), + D2, List.of(new SimpleContent(tissues[3], "6"), new SimpleContent(tissues[3], "5")) ); doReturn(scs).when(service).addressToSimpleContent(lw); doReturn(tissues).when(service).checkRowBasedLayout(lw, scs); @@ -412,10 +412,10 @@ public void testGetRowBasedLabelData_valid(boolean sameMedium) { String[] reps = { tissues[0].getReplicate(), tissues[1].getReplicate(), null, tissues[3].getReplicate() }; List expectedContents = List.of( - new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S001+"), - new LabelContent(donorNames[0], externalNames[1], tissueStrings[1], reps[1], "S003"), + new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S1+"), + new LabelContent(donorNames[0], externalNames[1], tissueStrings[1], reps[1], "S3"), new LabelContent(), - new LabelContent(donorNames[1], externalNames[3], tissueStrings[3], reps[3], "S005+") + new LabelContent(donorNames[1], externalNames[3], tissueStrings[3], reps[3], "S5+") ); assertEquals(expectedContents, ld.getContents()); } @@ -475,10 +475,10 @@ public void testGetDividedLabelData_valid(boolean sameMedium) { tissues[1].setMedium(new Medium(50, "bananas")); } Map> scs = Map.of( - A1, List.of(new SimpleContent(tissues[0], 1), new SimpleContent(tissues[0], 2)), - A2, List.of(new SimpleContent(tissues[0], 1)), - B1, List.of(new SimpleContent(tissues[0], 7), new SimpleContent(tissues[0], 3)), - C2, List.of(new SimpleContent(tissues[1], 4), new SimpleContent(tissues[1], 5)) + A1, List.of(new SimpleContent(tissues[0], "1"), new SimpleContent(tissues[0], "2")), + A2, List.of(new SimpleContent(tissues[0], "1")), + B1, List.of(new SimpleContent(tissues[0], "7"), new SimpleContent(tissues[0], "3")), + C2, List.of(new SimpleContent(tissues[1], "4"), new SimpleContent(tissues[1], "5")) ); doReturn(scs).when(service).addressToSimpleContent(lw); doReturn(tissues).when(service).checkDividedLayout(lw, scs); @@ -492,14 +492,14 @@ public void testGetDividedLabelData_valid(boolean sameMedium) { String[] reps = { tissues[0].getReplicate(), tissues[1].getReplicate() }; List expectedContents = List.of( - new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S001+"), - new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S001"), - new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S003+"), - new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], (String) null), - new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], (String) null), - new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], "S004+"), - new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], (String) null), - new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], (String) null) + new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S1+"), + new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S1"), + new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], "S3+"), + new LabelContent(donorNames[0], externalNames[0], tissueStrings[0], reps[0], null), + new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], null), + new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], "S4+"), + new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], null), + new LabelContent(donorNames[1], externalNames[1], tissueStrings[1], reps[1], null) ); assertEquals(expectedContents, ld.getContents()); } @@ -560,15 +560,15 @@ static Stream getContentArgs() { BioState custardState = new BioState(3, "Custard"); BioState fwState = new BioState(4, "Fetal waste"); - Sample sam1 = new Sample(1, 5, tissue, tissueState); + Sample sam1 = new Sample(1, "5", tissue, tissueState); Sample sam2 = new Sample(2, null, tissue, originalState); - Sample sam3 = new Sample(3, 7, tissue, custardState); - Sample sam4 = new Sample(4, 8, tissue, fwState); + Sample sam3 = new Sample(3, "7", tissue, custardState); + Sample sam4 = new Sample(4, "8", tissue, fwState); String tissueDesc = "HEA-1"; return Arrays.stream(new Object[][] { - {sam1, new LabelContent(donorName, tissue.getExternalName(), tissueDesc, rep, "S005")}, + {sam1, new LabelContent(donorName, tissue.getExternalName(), tissueDesc, rep, "S5")}, {sam2, new LabelContent(donorName, tissue.getExternalName(), tissueDesc, rep, "Original")}, {sam3, new LabelContent(donorName, tissue.getExternalName(), tissueDesc, rep, custardState.getName())}, {sam4, new LabelContent(donorName, tissue.getExternalName(), tissueDesc, rep, "F waste")}, diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestLabelPrintService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestLabelPrintService.java index c306100e2..9abb10020 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestLabelPrintService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestLabelPrintService.java @@ -82,11 +82,11 @@ public void testPrintLabwareSuccessful() throws IOException { when(mockPrinterRepo.getByName(printer.getName())).thenReturn(printer); List labelData = List.of( new LabwareLabelData(labware.get(0).getBarcode(), labware.get(0).getExternalBarcode(), "None", "2021-03-17", List.of( - new LabelContent("DONOR1", "ext1", "TISSUE1", "2", 3), - new LabelContent("DONOR2", "ext2", "TISSUE2", "3", 4) + LabelContent.ofSection("DONOR1", "ext1", "TISSUE1", "2", "3"), + LabelContent.ofSection("DONOR2", "ext2", "TISSUE2", "3", "4") )), new LabwareLabelData(labware.get(1).getBarcode(), labware.get(1).getExternalBarcode(), "None", "2021-03-16", List.of( - new LabelContent("DONOR3", "ext3", "TISSUE3", "4", (String) null) + new LabelContent("DONOR3", "ext3", "TISSUE3", "4", null) )) ); LabelPrintRequest expectedRequest = new LabelPrintRequest(labware.get(0).getLabwareType().getLabelType(), labelData); @@ -110,8 +110,8 @@ public void testPrintLabwareWithRowBasedLabel() throws IOException { when(mockPrinterRepo.getByName(printer.getName())).thenReturn(printer); List labelData = List.of( new LabwareLabelData(lw.getBarcode(), lw.getExternalBarcode(), "None", "2021-03-17", List.of( - new LabelContent("DONOR1", "ext1", "TISSUE1", "2", 3), - new LabelContent("DONOR2", "ext2", "TISSUE2", "3", 4) + LabelContent.ofSection("DONOR1", "ext1", "TISSUE1", "2", "3"), + LabelContent.ofSection("DONOR2", "ext2", "TISSUE2", "3", "4") )) ); LabelPrintRequest expectedRequest = new LabelPrintRequest(lw.getLabwareType().getLabelType(), labelData); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestSprintClient.java b/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestSprintClient.java index 2f7736548..a78e3ca8c 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestSprintClient.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/label/print/TestSprintClient.java @@ -41,10 +41,10 @@ public void testToJson() throws IOException { final LabelType labelType = EntityFactory.getLabelType(); LabelPrintRequest request = new LabelPrintRequest(labelType, List.of(new LabwareLabelData("STAN-1", "123456", "None", "2021-03-17", - List.of(new LabelContent("DONOR1", "ext1", "TISSUE1", "1", 2), - new LabelContent("DONOR2", "ext2", "TISSUE2", "3", 4))), + List.of(LabelContent.ofSection("DONOR1", "ext1", "TISSUE1", "1", "2"), + LabelContent.ofSection("DONOR2", "ext2", "TISSUE2", "3", "4"))), new LabwareLabelData("STAN-2", null, "None", "2021-03-16", - List.of(new LabelContent("DONOR3", "ext3", "TISSUE3", "5", (String) null)))) + List.of(new LabelContent("DONOR3", "ext3", "TISSUE3", "5", null)))) ); StringTemplate template = new StringTemplate("{\"barcode\":\"#barcode#\", " + "\"date\":\"#date#\", " + @@ -58,7 +58,7 @@ public void testToJson() throws IOException { "\"variables\":{\"printer\":\"printer1\"," + "\"printRequest\":{\"layouts\":[{\"barcode\":\"STAN-1\"," + "\"date\":\"2021-03-17\"," + - "\"contents\":[\"DONOR1\",\"TISSUE1\",\"R:1\",\"S002\",\"DONOR2\",\"TISSUE2\",\"R:3\",\"S004\"]}," + + "\"contents\":[\"DONOR1\",\"TISSUE1\",\"R:1\",\"S2\",\"DONOR2\",\"TISSUE2\",\"R:3\",\"S4\"]}," + "{\"barcode\":\"STAN-2\"," + "\"date\":\"2021-03-16\"," + "\"contents\":[\"DONOR3\",\"TISSUE3\",\"R:5\",\"\",\"\",\"\",\"\",\"\"]}]}}}"; diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestBioStateReplacer.java b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestBioStateReplacer.java index 4e8cb49ef..d7aaa69cf 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestBioStateReplacer.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestBioStateReplacer.java @@ -36,13 +36,13 @@ public void testUpdateBioStateInPlace() { BioState bs0 = new BioState(1, "Regular"); BioState bs1 = new BioState(2, "Decaf"); Tissue tissue = EntityFactory.getTissue(); - Sample s1 = new Sample(1, 1, tissue, bs0); - Sample s2 = new Sample(2, 2, tissue, bs0); - Sample s3 = new Sample(3, 3, tissue, bs1); - Sample s4 = new Sample(4, 4, tissue, bs1); + Sample s1 = new Sample(1, "1", tissue, bs0); + Sample s2 = new Sample(2, "2", tissue, bs0); + Sample s3 = new Sample(3, "3", tissue, bs1); + Sample s4 = new Sample(4, "4", tissue, bs1); - Sample s1b = new Sample(5, 1, tissue, bs1); - Sample s2b = new Sample(6, 2, tissue, bs1); + Sample s1b = new Sample(5, "1", tissue, bs1); + Sample s2b = new Sample(6, "2", tissue, bs1); LabwareType lt = EntityFactory.makeLabwareType(2,2); Labware lw = EntityFactory.makeEmptyLabware(lt); @@ -89,21 +89,21 @@ public void testReplaceSample() { BioState bs0 = new BioState(1, "Regular"); BioState bs1 = new BioState(2, "Decaf"); Tissue tissue = EntityFactory.getTissue(); - Sample sam1 = new Sample(1, 1, tissue, bs1); + Sample sam1 = new Sample(1, "1", tissue, bs1); final Map sampleMap = new HashMap<>(); assertSame(sam1, bsr.replaceSample(bs1, sam1, sampleMap)); assertThat(sampleMap).isEmpty(); verifyNoInteractions(mockSampleRepo); - Sample sam2 = new Sample(2, 2, tissue, bs0); - Sample sam3 = new Sample(3, 2, tissue, bs1); + Sample sam2 = new Sample(2, "2", tissue, bs0); + Sample sam3 = new Sample(3, "2", tissue, bs1); when(mockSampleRepo.save(any())).thenReturn(sam3); assertSame(sam3, bsr.replaceSample(bs1, sam2, sampleMap)); assertThat(sampleMap).hasSize(1); assertSame(sam3, sampleMap.get(sam2.getId())); assertSame(sam3, bsr.replaceSample(bs1, sam2, sampleMap)); verify(mockSampleRepo).save(any()); - verify(mockSampleRepo).save(new Sample(null, 2, tissue, bs1)); + verify(mockSampleRepo).save(new Sample(null, "2", tissue, bs1)); } } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestInPlaceOpService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestInPlaceOpService.java index 68a637ab8..2ad00e3c8 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestInPlaceOpService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/TestInPlaceOpService.java @@ -170,7 +170,7 @@ static Stream validateOpTypeArgs() { @Test public void testMakeActions_nobs() { Sample sam1 = EntityFactory.getSample(); - Sample sam2 = new Sample(sam1.getId()+1, 500, sam1.getTissue(), sam1.getBioState()); + Sample sam2 = new Sample(sam1.getId()+1, "500", sam1.getTissue(), sam1.getBioState()); LabwareType lt = EntityFactory.makeLabwareType(3,1); Labware lw = EntityFactory.makeLabware(lt, sam1, sam2); Slot slot1 = lw.getFirstSlot(); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationService.java index d7a50b25d..8ac71a782 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationService.java @@ -18,6 +18,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import static java.util.Objects.requireNonNull; import static java.util.stream.Collectors.*; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -187,9 +188,8 @@ public void testPerformConfirmation(ConfirmOperationLabware col, OperationType o when(mockOperationService.createOperation(any(), any(), any(), any())).thenReturn(op); doAnswer(invocation -> { PlanAction pa = invocation.getArgument(0); - int section = pa.getNewSection(); - return sections.stream().filter(sec -> sec.getSection()==section) - .findAny() + String section = requireNonNull(pa.getNewSection(), "No section is null"); + return sections.stream().filter(sec -> section.equalsIgnoreCase(sec.getSection())) .findAny() .orElseThrow(); }).when(service).getOrCreateSample(any(), any()); } else { @@ -230,9 +230,9 @@ static Stream performConfirmationArgs() { Sample sample = new Sample(50, null, EntityFactory.getTissue(), EntityFactory.getBioState()); Sample[] sections = { null, - new Sample(51, 1, sample.getTissue(), sample.getBioState()), - new Sample(52, 2, sample.getTissue(), sample.getBioState()), - new Sample(53, 3, sample.getTissue(), sample.getBioState()), + new Sample(51, "1", sample.getTissue(), sample.getBioState()), + new Sample(52, "2", sample.getTissue(), sample.getBioState()), + new Sample(53, "3", sample.getTissue(), sample.getBioState()), }; Labware source = EntityFactory.makeLabware(EntityFactory.getTubeType(), sample); final Slot srcSlot = source.getFirstSlot(); @@ -245,13 +245,13 @@ static Stream performConfirmationArgs() { new ConfirmOperationLabware(dests[0].getBarcode()), new ConfirmOperationLabware(dests[1].getBarcode(), true, null, null), new ConfirmOperationLabware(dests[2].getBarcode(), false, - List.of(new CancelPlanAction(A1, sample.getId(), 2), new CancelPlanAction(A2, sample.getId(), 3)), + List.of(new CancelPlanAction(A1, sample.getId(), "2"), new CancelPlanAction(A2, sample.getId(), "3")), null ), new ConfirmOperationLabware(dests[3].getBarcode(), false, - List.of(new CancelPlanAction(A1, sample.getId(), 1), - new CancelPlanAction(A1, sample.getId(), 2), - new CancelPlanAction(A2, sample.getId(), 3)), + List.of(new CancelPlanAction(A1, sample.getId(), "1"), + new CancelPlanAction(A1, sample.getId(), "2"), + new CancelPlanAction(A2, sample.getId(), "3")), null ) }; @@ -259,10 +259,10 @@ static Stream performConfirmationArgs() { List[] planActions = Arrays.stream(dests) .map(dest -> List.of( - new PlanAction(20, 10, srcSlot, dest.getSlot(A1), sample, 1, "4", null), - new PlanAction(21, 10, srcSlot, dest.getSlot(A1), sample, 2, null, null), - new PlanAction(22, 10, srcSlot, dest.getSlot(A2), sample, 3, "7", null), - new PlanAction(23, 10, srcSlot, otherSlot, sample, 4, null, null) + new PlanAction(20, 10, srcSlot, dest.getSlot(A1), sample, "1", "4", null), + new PlanAction(21, 10, srcSlot, dest.getSlot(A1), sample, "2", null, null), + new PlanAction(22, 10, srcSlot, dest.getSlot(A2), sample, "3", "7", null), + new PlanAction(23, 10, srcSlot, otherSlot, sample, "4", null, null) )) .toArray(List[]::new); @@ -314,7 +314,7 @@ public void testGetOrCreateSample(PlanAction planAction, Slot slot, Sample expec assertSame(expectedSample, service.getOrCreateSample(planAction, slot)); if (creates) { - Integer newSection = planAction.getNewSection(); + String newSection = planAction.getNewSection(); if (newSection==null) { newSection = planAction.getSample().getSection(); } @@ -322,14 +322,16 @@ public void testGetOrCreateSample(PlanAction planAction, Slot slot, Sample expec if (newBioState==null) { newBioState = planAction.getSample().getBioState(); } - verify(mockSampleRepo).save(makeSample(null, newSection, planAction.getSample().getTissue(), newBioState)); + Tissue tissue = planAction.getSample().getTissue(); + verify(mockSampleRepo).save(new Sample(null, newSection, tissue, newBioState)); } else { verifyNoInteractions(mockSampleRepo); } } private static Sample makeSample(Integer id, Integer section, Tissue tissue, BioState bioState) { - return new Sample(id, section, tissue, bioState); + String sectionString = (section==null ? null : section.toString()); + return new Sample(id, sectionString, tissue, bioState); } static Stream getOrCreateSampleArguments() { @@ -350,22 +352,22 @@ static Stream getOrCreateSampleArguments() { return Stream.of( Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, blockSample, null, null, null), emptySlot, blockSample, false), - Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, blockSample, 3, null, null), + Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, blockSample, "3", null, null), emptySlot, newSection, true), - Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, blockSample, 3, null, null), + Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, blockSample, "3", null, null), populousSlot, newSection, true), - Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, blockSample, 1, null, null), + Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, blockSample, "1", null, null), populousSlot, sections.get(1), false), - Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, blockSample, 2, null, null), + Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, blockSample, "2", null, null), populousSlot, sections.get(2), false), - Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, sections.get(1), 1, null, null), + Arguments.of(new PlanAction(null, null, sourceSlot, populousSlot, sections.get(1), "1", null, null), populousSlot, sections.get(1), false), - Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, sections.get(1), 3, null, null), + Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, sections.get(1), "3", null, null), emptySlot, newSection, true), Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, blockSample, null, null, rna), emptySlot, newSection, true), - Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, blockSample, 17, null, rna), + Arguments.of(new PlanAction(null, null, sourceSlot, emptySlot, blockSample, "17", null, rna), emptySlot, newSection, true) ); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationValidation.java b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationValidation.java index 3a4d14705..79af50a14 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationValidation.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmOperationValidation.java @@ -10,8 +10,8 @@ import uk.ac.sanger.sccp.stan.model.*; import uk.ac.sanger.sccp.stan.repo.LabwareRepo; import uk.ac.sanger.sccp.stan.repo.PlanOperationRepo; -import uk.ac.sanger.sccp.stan.request.confirm.*; import uk.ac.sanger.sccp.stan.request.AddressCommentId; +import uk.ac.sanger.sccp.stan.request.confirm.*; import uk.ac.sanger.sccp.stan.service.CommentValidationService; import java.util.*; @@ -210,16 +210,16 @@ public void testValidateCancelledActions() { OperationType opType = EntityFactory.makeOperationType("Section", null); int planId = 200; List planActions = List.of( - new PlanAction(201, planId, srcSlot, lw.getFirstSlot(), sample, 1, null, null), - new PlanAction(202, planId, srcSlot, lw.getFirstSlot(), sample, 2, null, null), - new PlanAction(203, planId, srcSlot, otherLabware.getSlot(A2), sample, 1, null, null) + new PlanAction(201, planId, srcSlot, lw.getFirstSlot(), sample, "1", null, null), + new PlanAction(202, planId, srcSlot, lw.getFirstSlot(), sample, "2", null, null), + new PlanAction(203, planId, srcSlot, otherLabware.getSlot(A2), sample, "1", null, null) ); PlanOperation plan = new PlanOperation(planId, opType, null, planActions, EntityFactory.getUser()); final Integer sampleId = sample.getId(); List cpas = List.of( - new CancelPlanAction(A1, sampleId, 1), - new CancelPlanAction(A2, sampleId, 1), - new CancelPlanAction(B1, sampleId, 1), + new CancelPlanAction(A1, sampleId, "1"), + new CancelPlanAction(A2, sampleId, "1"), + new CancelPlanAction(B1, sampleId, "1"), new CancelPlanAction(null, null, null) ); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionService.java index 42c56df6a..df7048172 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionService.java @@ -257,7 +257,7 @@ public void testConfirmLabwareMissingPlanAction() { final Address A1 = new Address(1,1); Map commentMap = Map.of(1, new Comment(1, "com", "cat")); ConfirmSectionLabware csl = new ConfirmSectionLabware(lw.getBarcode(), false, - List.of(new ConfirmSection(A1, sample.getId(), 12)), null, null); + List.of(new ConfirmSection(A1, sample.getId(), "12")), null, null); assertThat(assertThrows(IllegalArgumentException.class, () -> service.confirmLabware(EntityFactory.getUser(), csl, lw, plan, commentMap))) @@ -282,14 +282,14 @@ public void testConfirmLabware() { final Address A1 = new Address(1,1); final Address B3 = new Address(2,3); List csecs = List.of( - new ConfirmSection(A1, sample.getId(), 10, List.of(30,31)), - new ConfirmSection(B3, sample.getId(), 12, null) + new ConfirmSection(A1, sample.getId(), "10", List.of(30,31)), + new ConfirmSection(B3, sample.getId(), "12", null) ); csecs.getFirst().setThickness("10.5"); ConfirmSectionLabware csl = new ConfirmSectionLabware(lw1.getBarcode(), false, csecs, List.of(), null); Map planActionMap = Stream.of( new PlanAction(1, 1, source, lw1.getSlot(A1), sample), - new PlanAction(2, 1, source, lw1.getSlot(B3), sample, 12, "50", null) + new PlanAction(2, 1, source, lw1.getSlot(B3), sample, "12", "50", null) ).collect(BasicUtils.inMap(pa -> pa.getDestination().getAddress(), HashMap::new)); plan.setPlanActions(new ArrayList<>(planActionMap.values())); @@ -367,7 +367,7 @@ public void testThickness(String confirmThickness, String planThickness, String @Test public void testMakeAction() { Sample sourceSample = new Sample(100, null, EntityFactory.getTissue(), EntityFactory.getBioState()); - Sample section = new Sample(101, 11, sourceSample.getTissue(), sourceSample.getBioState()); + Sample section = new Sample(101, "11", sourceSample.getTissue(), sourceSample.getBioState()); Labware lw0 = EntityFactory.makeLabware(EntityFactory.getTubeType(), sourceSample); Slot source = lw0.getFirstSlot(); Labware lw1 = EntityFactory.makeEmptyLabware(EntityFactory.getTubeType()); @@ -389,7 +389,8 @@ void testGetSection(Map sectionMap, Integer sectionNum, BioState bs0, Slot sourceSlot, Sample sourceSample, Slot destSlot, Sample expectedSample, boolean create) { sectionMap = new HashMap<>(sectionMap); - ConfirmSection csec = new ConfirmSection((Address) null, null, sectionNum, null); + String sectionString = (sectionNum==null ? null : sectionNum.toString()); + ConfirmSection csec = new ConfirmSection((Address) null, null, sectionString, null); PlanAction pa = new PlanAction(1, 1, sourceSlot, destSlot, sourceSample); pa.setNewBioState(bs0); if (create) { @@ -397,11 +398,11 @@ void testGetSection(Map sectionMap, Integer sectionNum, } assertSame(expectedSample, service.getSection(sectionMap, csec, pa, destSlot)); if (create) { - verify(service).createSection(pa.getSample().getTissue(), sectionNum, expectedSample.getBioState()); + verify(service).createSection(pa.getSample().getTissue(), sectionString, expectedSample.getBioState()); } else { verify(service, never()).createSection(any(), any(), any()); } - assertSame(expectedSample, sectionMap.get(new SectionKey(sourceSample.getTissue().getId(), sectionNum, expectedSample.getBioState()))); + assertSame(expectedSample, sectionMap.get(new SectionKey(sourceSample.getTissue().getId(), sectionString, expectedSample.getBioState()))); } static Stream getSectionArgs() { @@ -415,7 +416,7 @@ static Stream getSectionArgs() { Slot destSlot = EntityFactory.makeEmptyLabware(EntityFactory.getTubeType()).getFirstSlot(); Slot destSlot2 = EntityFactory.makeLabware(EntityFactory.getTubeType(), sams[2]).getFirstSlot(); Map sectionMap = Map.of( - new SectionKey(sams[0].getTissue().getId(), 1, bs), sams[1] + new SectionKey(sams[0].getTissue().getId(), "1", bs), sams[1] ); return Arrays.stream(new Object[][] { { sectionMap, 1, bs, sourceSlot, sourceSample, destSlot, sams[1], false}, @@ -428,12 +429,12 @@ static Stream getSectionArgs() { public void testCreateSection() { Tissue tissue = EntityFactory.getTissue(); BioState bs = new BioState(50, "Bananas"); - Integer secNum = 7; - Sample createdSample = new Sample(101, secNum, tissue, bs); + String secStr = "7"; + Sample createdSample = new Sample(101, secStr, tissue, bs); when(mockSampleRepo.save(any())).thenReturn(createdSample); - assertSame(createdSample, service.createSection(tissue, secNum, bs)); - verify(mockSampleRepo).save(new Sample(null, secNum, tissue, bs)); + assertSame(createdSample, service.createSection(tissue, secStr, bs)); + verify(mockSampleRepo).save(new Sample(null, secStr, tissue, bs)); } @Test @@ -463,7 +464,7 @@ public void testRecordCommentsValid() { final Address A1 = new Address(1,1); final Address B3 = new Address(2,3); Sample[] samples = IntStream.range(1, 3) - .mapToObj(i -> new Sample(i, 10+i, EntityFactory.getTissue(), EntityFactory.getBioState())) + .mapToObj(i -> new Sample(i, String.valueOf(10+i), EntityFactory.getTissue(), EntityFactory.getBioState())) .toArray(Sample[]::new); lw.getSlot(A1).getSamples().addAll(Arrays.asList(samples)); ConfirmSectionLabware csl = new ConfirmSectionLabware(lw.getBarcode(), false, List.of(), List.of( @@ -559,7 +560,7 @@ public void testUpdateSourceBlocks() { Labware[] destLabware = new Labware[2]; for (int i = 0; i < sections.length; ++i) { - sections[i] = new Sample(100+i, 20+i, tissue, bs); + sections[i] = new Sample(100+i, String.valueOf(20+i), tissue, bs); } destLabware[0] = EntityFactory.makeLabware(slideType, sections[0], sections[3]); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionValidationService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionValidationService.java index 02acb8159..233bae8bb 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionValidationService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/operation/confirm/TestConfirmSectionValidationService.java @@ -12,12 +12,14 @@ import uk.ac.sanger.sccp.stan.request.confirm.*; import uk.ac.sanger.sccp.stan.request.confirm.ConfirmSectionLabware.AddressCommentId; import uk.ac.sanger.sccp.stan.service.CommentValidationService; +import uk.ac.sanger.sccp.stan.service.Validator; import uk.ac.sanger.sccp.stan.service.sanitiser.Sanitiser; import uk.ac.sanger.sccp.stan.service.work.WorkService; import uk.ac.sanger.sccp.utils.UCMap; import uk.ac.sanger.sccp.utils.Zip; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Stream; @@ -29,6 +31,7 @@ import static uk.ac.sanger.sccp.stan.EntityFactory.objToList; import static uk.ac.sanger.sccp.stan.Matchers.assertProblem; import static uk.ac.sanger.sccp.stan.Matchers.mayAddProblem; +import static uk.ac.sanger.sccp.utils.BasicUtils.nullOrEmpty; /** * Tests {@link ConfirmSectionValidationServiceImp} @@ -47,6 +50,8 @@ public class TestConfirmSectionValidationService { CommentValidationService mockCommentValidationService; @Mock Sanitiser mockThicknessSanitiser; + @Mock + Validator mockSectionValidator; OperationType opType; AutoCloseable mocking; @@ -55,7 +60,7 @@ public class TestConfirmSectionValidationService { void setup() { mocking = MockitoAnnotations.openMocks(this); service = spy(new ConfirmSectionValidationServiceImp(mockLwRepo, mockPlanRepo, mockWorkService, - mockCommentValidationService, mockThicknessSanitiser)); + mockCommentValidationService, mockThicknessSanitiser, mockSectionValidator)); opType = new OperationType(2, "Section", OperationTypeFlag.SOURCE_IS_BLOCK.bit(), EntityFactory.getBioState()); } @@ -144,7 +149,7 @@ public void testCheckRepeatedDestSlots() { public void testValidateCommentIds(boolean valid) { List expectedProblems = (valid ? List.of() : List.of("Bad sec com", "Bad slot com")); Set problems = new HashSet<>(expectedProblems.size()); - ConfirmSection cs = new ConfirmSection(new Address(1,3), 50, 4); + ConfirmSection cs = new ConfirmSection(new Address(1,3), 50, "4"); cs.setCommentIds(List.of(10,11)); List csls = List.of( new ConfirmSectionLabware("STAN-1"), @@ -319,10 +324,10 @@ public void testValidateOperations() { lw2.setBarcode("STAN-002"); final Address A1 = new Address(1,1); final ConfirmSectionLabware csl1 = new ConfirmSectionLabware(lw1.getBarcode(), false, - List.of(new ConfirmSection(A1, sample.getId(), 12)), + List.of(new ConfirmSection(A1, sample.getId(), "12")), List.of(new AddressCommentId(A1, 4)), null); final ConfirmSectionLabware csl2 = new ConfirmSectionLabware(lw2.getBarcode(), false, - List.of(new ConfirmSection(A1, sample.getId(), 15)), + List.of(new ConfirmSection(A1, sample.getId(), "15")), List.of(new AddressCommentId(A1, 5)), null); List csls = List.of( csl1, csl2, @@ -334,7 +339,7 @@ public void testValidateOperations() { UCMap lwMap = UCMap.from(Labware::getBarcode, lw1, lw2); Set problems = new HashSet<>(); - final List>> sampleIdMaps = new ArrayList<>(); + final List>> sampleIdMaps = new ArrayList<>(); doAnswer(invocation -> { if (invocation.getArgument(2)==lw1) { @@ -345,7 +350,7 @@ public void testValidateOperations() { }).when(service).validateCommentAddresses(any(), any(), any(), any()); doAnswer(invocation -> { - Map> sampleIdMap = invocation.getArgument(4); + Map> sampleIdMap = invocation.getArgument(4); assertNotNull(sampleIdMap); if (sampleIdMaps.isEmpty()) { assertThat(sampleIdMap).isEmpty(); @@ -362,7 +367,7 @@ public void testValidateOperations() { // Make sure that the same sample id map is passed to both invocations of validateSections assertThat(sampleIdMaps).hasSize(2); - final Map> sampleIdMap = sampleIdMaps.get(0); + final Map> sampleIdMap = sampleIdMaps.get(0); assertSame(sampleIdMap, sampleIdMaps.get(1)); assertThat(problems).containsExactlyInAnyOrder("Comment problem.", "Section problem."); @@ -426,11 +431,11 @@ public void testValidateSections() { List.of(lw1.getSlot(A1), lw1.getSlot(A1), lw1.getSlot(B3), lw2.getSlot(A1)), EntityFactory.getUser()); List cons = List.of( - new ConfirmSection(A1, sampleA.getId(), 13), - new ConfirmSection(B3, sampleB.getId(), 14) + new ConfirmSection(A1, sampleA.getId(), "13"), + new ConfirmSection(B3, sampleB.getId(), "14") ); - Map> sampleIdSections = new HashMap<>(); - sampleIdSections.put(sampleA.getId()-1, hashSetOf(10,11)); + Map> sampleIdSections = new HashMap<>(); + sampleIdSections.put(sampleA.getId()-1, hashSetOf("10","11")); final Set problems = hashSetOf("Identifiable problem."); @@ -438,7 +443,7 @@ public void testValidateSections() { service.validateSections(problems, cons, lw1, plan, sampleIdSections); - assertThat(sampleIdSections).containsExactlyEntriesOf(Map.of(sampleA.getId()-1, Set.of(10,11))); + assertThat(sampleIdSections).containsExactlyEntriesOf(Map.of(sampleA.getId()-1, Set.of("10","11"))); Map sampleMaxSection = Map.of(sampleA.getId(), 12); Map> plannedSampleIds = Map.of(A1, Set.of(sampleA.getId(), sampleB.getId()), @@ -451,10 +456,19 @@ public void testValidateSections() { @MethodSource("validateSectionArgs") @ParameterizedTest public void testValidateSection(Labware lw, ConfirmSection con, Map> plannedSampleIds, - Map sampleMaxSection, Map> inputSampleIdSections, - List expectedProblems, Map> newSampleIdSections) { + Map sampleMaxSection, Map> inputSampleIdSections, + List expectedProblems, Map> newSampleIdSections) { Set problems = new HashSet<>(); - Map> sampleIdSections = inputSampleIdSections==null ? new HashMap<>() : new HashMap<>(inputSampleIdSections); + when(mockSectionValidator.validate(any(), any())).then(invocation -> { + String string = invocation.getArgument(0); + if (string != null && string.indexOf('-') >= 0) { + Consumer consumer = invocation.getArgument(1); + consumer.accept("Bad section"); + return false; + } + return true; + }); + Map> sampleIdSections = inputSampleIdSections==null ? new HashMap<>() : new HashMap<>(inputSampleIdSections); service.validateSection(problems, lw, con, plannedSampleIds, sampleMaxSection, sampleIdSections); assertThat(problems).containsExactlyInAnyOrderElementsOf(expectedProblems); assertEquals(combineMaps(inputSampleIdSections, newSampleIdSections), sampleIdSections); @@ -485,33 +499,33 @@ static Stream validateSectionArgs() { fw.setBarcode("STAN-FE7A1"); return Arrays.stream(new Object[][] { - { lw, new ConfirmSection(null, aid, 20), plannedSampleIds, sampleMaxSection, null, + { lw, new ConfirmSection(null, aid, "20"), plannedSampleIds, sampleMaxSection, null, "Section specified with no address.", null }, - { lw, new ConfirmSection(A1, null, 20), plannedSampleIds, sampleMaxSection, null, + { lw, new ConfirmSection(A1, null, "20"), plannedSampleIds, sampleMaxSection, null, "Sample id not specified for section.", null }, { lw, new ConfirmSection(A1, aid, null), plannedSampleIds, sampleMaxSection, null, "Section number not specified for section.", null }, - { lw, new ConfirmSection(F8, aid, 20), plannedSampleIds, sampleMaxSection, null, + { lw, new ConfirmSection(F8, aid, "20"), plannedSampleIds, sampleMaxSection, null, "Invalid address F8 in labware STAN-01 specified as destination.", null }, - { lw, new ConfirmSection(A1, aid, -4), plannedSampleIds, sampleMaxSection, null, - "Section number cannot be less than zero.", null }, - { lw, new ConfirmSection(A2, bid, 20), plannedSampleIds, sampleMaxSection, null, - "Sample id "+bid+" is not expected in address A2 of labware STAN-01.", Map.of(bid, Set.of(20))}, - { lw, new ConfirmSection(B3, aid, 21), plannedSampleIds, sampleMaxSection, null, - "Sample id "+aid+" is not expected in address B3 of labware STAN-01.", Map.of(aid, Set.of(21))}, - { lw, new ConfirmSection(A1, aid, 14), plannedSampleIds, sampleMaxSection, Map.of(aid, Set.of(13,14)), + { lw, new ConfirmSection(A1, aid, "-4"), plannedSampleIds, sampleMaxSection, null, + "Bad section", null }, + { lw, new ConfirmSection(A2, bid, "20"), plannedSampleIds, sampleMaxSection, null, + "Sample id "+bid+" is not expected in address A2 of labware STAN-01.", Map.of(bid, Set.of("20"))}, + { lw, new ConfirmSection(B3, aid, "21"), plannedSampleIds, sampleMaxSection, null, + "Sample id "+aid+" is not expected in address B3 of labware STAN-01.", Map.of(aid, Set.of("21"))}, + { lw, new ConfirmSection(A1, aid, "14"), plannedSampleIds, sampleMaxSection, Map.of(aid, Set.of("13","14")), "Repeated section: 14 from sample id "+aid+".", null}, - { lw, new ConfirmSection(A1, aid, 8), plannedSampleIds, sampleMaxSection, null, - "Section numbers from sample id "+aid+" must be greater than 12.", Map.of(aid, Set.of(8))}, - { lw, new ConfirmSection(A1, aid, 12), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf(16)), - "Section numbers from sample id "+aid+" must be greater than 12.", Map.of(aid, Set.of(16,12))}, - { fw, new ConfirmSection(A1, aid, 20), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf(18,19)), - "Section number not expected for fetal waste.", Map.of(aid, Set.of(18,19))}, - - { lw, new ConfirmSection(A1, aid, 20), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf(18, 19)), - null, Map.of(aid, Set.of(18,19,20))}, - { fw, new ConfirmSection(A1, aid, null), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf(18, 19)), - null, Map.of(aid, hashSetOf(18,19,null))}, + { lw, new ConfirmSection(A1, aid, "8"), plannedSampleIds, sampleMaxSection, null, + "Section numbers from sample id "+aid+" must be greater than 12.", Map.of(aid, Set.of("8"))}, + { lw, new ConfirmSection(A1, aid, "12"), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf("16")), + "Section numbers from sample id "+aid+" must be greater than 12.", Map.of(aid, Set.of("16","12"))}, + { fw, new ConfirmSection(A1, aid, "20"), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf("18","19")), + "Section number not expected for fetal waste.", Map.of(aid, Set.of("18","19"))}, + + { lw, new ConfirmSection(A1, aid, "20"), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf("18", "19")), + null, Map.of(aid, Set.of("18","19","20"))}, + { fw, new ConfirmSection(A1, aid, null), plannedSampleIds, sampleMaxSection, Map.of(aid, hashSetOf("18", "19")), + null, Map.of(aid, hashSetOf("18","19",null))}, }).map(toListArguments(5)); } @@ -530,13 +544,13 @@ private static Function toListArguments(int... indexes) { } private static Map combineMaps(Map a, Map b) { - if (a==null || a.isEmpty()) { - if (b==null || b.isEmpty()) { + if (nullOrEmpty(a)) { + if (nullOrEmpty(b)) { return Map.of(); } return b; } - if (b==null || b.isEmpty()) { + if (nullOrEmpty(b)) { return a; } Map c = new HashMap<>(a); diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterClashChecker.java b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterClashChecker.java index afc5bfaf5..36eb65c64 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterClashChecker.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterClashChecker.java @@ -61,7 +61,7 @@ private Tissue[] createTissues() { private Sample[] createSamples() { if (samples==null) { BioState bs = EntityFactory.getBioState(); - samples = Arrays.stream(createTissues()).map(t -> new Sample(10+t.getId(), 3, t, bs)).toArray(Sample[]::new); + samples = Arrays.stream(createTissues()).map(t -> new Sample(10+t.getId(), "3", t, bs)).toArray(Sample[]::new); } return samples; } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterValidationFactory.java b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterValidationFactory.java index 29d34b397..caa638e02 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterValidationFactory.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestRegisterValidationFactory.java @@ -11,6 +11,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.mock; +import static uk.ac.sanger.sccp.stan.Matchers.genericMock; /** * Tests {@link RegisterValidationFactory} @@ -18,17 +19,17 @@ */ public class TestRegisterValidationFactory { RegisterValidationFactory registerValidationFactory; - @SuppressWarnings("unchecked") + @BeforeEach void setup() { - Validator mockStringValidator = mock(Validator.class); - Sanitiser mockSanitiser = mock(Sanitiser.class); + Validator mockStringValidator = genericMock(Validator.class); + Sanitiser mockSanitiser = genericMock(Sanitiser.class); registerValidationFactory = new RegisterValidationFactory( mock(DonorRepo.class), mock(HmdmcRepo.class), mock(TissueTypeRepo.class), mock(LabwareTypeRepo.class), mock(MediumRepo.class), mock(FixativeRepo.class), mock(TissueRepo.class), mock(SpeciesRepo.class), mock(LabwareRepo.class), mock(BioStateRepo.class), mock(CellClassRepo.class), mockStringValidator, mockStringValidator, mockStringValidator, - mockStringValidator, mockStringValidator, mockSanitiser, mockStringValidator, mockStringValidator, + mockStringValidator, mockStringValidator, mockSanitiser, mockStringValidator, mockStringValidator, mockStringValidator, mock(TissueFieldChecker.class), mock(SlotRegionService.class), mock(BioRiskService.class), mock(WorkService.class)); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterService.java index 955931528..70abcaa54 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterService.java @@ -133,9 +133,9 @@ public void testAssembleResult() { UCMap tissueMap = UCMap.from(Tissue::getExternalName, tissue1, tissue2, tissue3); BioState bs = EntityFactory.getBioState(); - Sample sample1 = new Sample(101, 1, tissue1, bs); - Sample sample2 = new Sample(102, 2, tissue2, bs); - Sample sample3 = new Sample(103, 3, tissue3, bs); + Sample sample1 = new Sample(101, "1", tissue1, bs); + Sample sample2 = new Sample(102, "2", tissue2, bs); + Sample sample3 = new Sample(103, "3", tissue3, bs); LabwareType lt = EntityFactory.makeLabwareType(2, 2); Labware lw1 = EntityFactory.makeLabware(lt, sample1, sample2); lw1.setExternalBarcode("EXT-1"); @@ -205,7 +205,7 @@ public void testCreateTissues() { }).collect(toList()); final BioState bs = EntityFactory.getBioState(); List samples = unsavedTissues.stream() - .map(tis -> new Sample(null, 4, tis, bs)) + .map(tis -> new Sample(null, "4", tis, bs)) .collect(toList()); when(mockTissueRepo.saveAll(any())).thenReturn(savedTissues); @@ -224,13 +224,13 @@ public void testCreateSamples() { .collect(toList()); BioState bs = EntityFactory.getBioState(); final List savedSamples = tissues.stream() - .map(t -> new Sample(20*t.getId(), 1, t, bs)) + .map(t -> new Sample(20*t.getId(), "1", t, bs)) .collect(toList()); final List unsavedSamples = savedSamples.stream() .map(sam -> { Tissue unsavedTissue = new Tissue(); unsavedTissue.setExternalName(sam.getTissue().getExternalName()); - return new Sample(null, 1, unsavedTissue, bs); + return new Sample(null, "1", unsavedTissue, bs); }) .collect(toList()); when(mockSampleRepo.saveAll(any())).thenReturn(savedSamples); @@ -276,9 +276,9 @@ public void testCreateLabware(boolean prebarcode) { Tissue tissue2 = EntityFactory.makeTissue(tissue1.getDonor(), tissue1.getSpatialLocation()); Tissue tissue3 = EntityFactory.makeTissue(tissue1.getDonor(), tissue1.getSpatialLocation()); BioState bs = EntityFactory.getBioState(); - Sample sample1 = new Sample(1, 1, tissue1, bs); - Sample sample2 = new Sample(2, 1, tissue2, bs); - Sample sample3 = new Sample(3, 1, tissue3, bs); + Sample sample1 = new Sample(1, "1", tissue1, bs); + Sample sample2 = new Sample(2, "1", tissue2, bs); + Sample sample3 = new Sample(3, "1", tissue3, bs); String xb = "EXT1"; Labware lw = EntityFactory.makeEmptyLabware(lt); lw.setExternalBarcode(xb); @@ -384,7 +384,7 @@ public void testCreateOp() { Sample[] samples = IntStream.range(0,3) .mapToObj(i -> { Tissue tissue = EntityFactory.makeTissue(donor, sl); - return new Sample(10+i, 5+i, tissue, bs); + return new Sample(10+i, String.valueOf(5+i), tissue, bs); }) .toArray(Sample[]::new); final Slot slotA1 = lw.getSlot(A1); @@ -501,7 +501,7 @@ private static Sample[] makeSamples(int numSamples) { return IntStream.range(0,numSamples) .mapToObj(i -> { Tissue tissue = EntityFactory.makeTissue(donor, sl); - return new Sample(10+i, 5+i, tissue, bs); + return new Sample(10+i, String.valueOf(5+i), tissue, bs); }) .toArray(Sample[]::new); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterValidation.java b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterValidation.java index c40b741df..8d03a9e30 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterValidation.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/register/TestSectionRegisterValidation.java @@ -55,6 +55,7 @@ public class TestSectionRegisterValidation { @Mock private Validator mockVisiumLpBarcodeValidation; @Mock private Validator mockXeniumBarcodeValidator; @Mock private Validator mockXeniumLotValidator; + @Mock private Validator mockSectionValidator; private Sanitiser thicknessSanisiser; @Mock private SlotRegionService mockSlotRegionService; @Mock private BioRiskService mockBioRiskService; @@ -100,6 +101,7 @@ private SectionRegisterValidation makeValidation(Object requestObj) { mockSlotRegionService, mockBioRiskService, mockWorkService, mockExternalBarcodeValidation, mockDonorNameValidation, mockExternalNameValidation, mockReplicateValidator, mockVisiumLpBarcodeValidation, mockXeniumBarcodeValidator, mockXeniumLotValidator, + mockSectionValidator, thicknessSanisiser)); } @@ -665,6 +667,15 @@ void testCheckForPrebarcodeMismatch(String mode) { public void testValidateSamples(Object contentsObj, UCMap tissueMap, Object expectedProblemsObj, Object expectedSamplesObj, BioState bs) { when(mockBioStateRepo.findByName("Tissue")).thenReturn(Optional.ofNullable(bs)); + when(mockSectionValidator.validate(any(), any())).then(invocation -> { + String string = invocation.getArgument(0); + if (string != null && string.indexOf('-') >= 0) { + Consumer consumer = invocation.getArgument(1); + consumer.accept("Invalid section number."); + return false; + } + return true; + }); SectionRegisterValidation val = makeValidation(contentsObj); @@ -685,14 +696,14 @@ static Stream validateSamplesArgs() { return Stream.of( Arguments.of(content("TISSUE1", 2, 4), tissues, null, - new Sample(null, 2, tissue1, bs), bs), + new Sample(null, "2", tissue1, bs), bs), Arguments.of(content("TISSUE1", 2, null), tissues, null, - new Sample(null, 2, tissue1, bs), bs), + new Sample(null, "2", tissue1, bs), bs), Arguments.of(content("TISSUE1", null, 4), tissues, "Missing section number.", null, bs), Arguments.of(content("TISSUE1", -2, 4), tissues, - "Section number cannot be negative.", null, bs), + "Invalid section number.", null, bs), Arguments.of(content("TISSUE1", 4, -3), tissues, "Value outside the expected bounds for thickness: -3", null, bs), Arguments.of(content("TISSUE1", 2, 4), tissues, @@ -833,7 +844,7 @@ public void testAnyMissingRegions(boolean anyMissing) { private static SectionRegisterContent content(String extName, Integer section, Integer thickness) { SectionRegisterContent content = new SectionRegisterContent(); content.setExternalIdentifier(extName); - content.setSectionNumber(section); + content.setSectionNumber(section==null ? null : section.toString()); content.setSectionThickness(thickness==null ? null : thickness.toString()); return content; } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/register/filereader/TestSectionRegisterFileReader.java b/src/test/java/uk/ac/sanger/sccp/stan/service/register/filereader/TestSectionRegisterFileReader.java index 3e8ecb248..d93de6b04 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/register/filereader/TestSectionRegisterFileReader.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/register/filereader/TestSectionRegisterFileReader.java @@ -446,7 +446,7 @@ void testCreateRequestContent_full() { row.put(Column.Spatial_location, 2); row.put(Column.Embedding_medium, "brass"); row.put(Column.Fixative, "Floop"); - row.put(Column.Section_number, 400); + row.put(Column.Section_number, "400"); row.put(Column.Section_position, "Middle"); SectionRegisterContent src = reader.createRequestContent(problems, row); assertEquals("Donor1", src.getDonorIdentifier()); @@ -461,7 +461,7 @@ void testCreateRequestContent_full() { assertEquals(2, src.getSpatialLocation()); assertEquals("brass", src.getMedium()); assertEquals("Floop", src.getFixative()); - assertEquals(400, src.getSectionNumber()); + assertEquals("400", src.getSectionNumber()); assertEquals("Middle", src.getRegion()); assertThat(problems).isEmpty(); } diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestAncestoriser.java b/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestAncestoriser.java index 3fcbabe74..b3af89883 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestAncestoriser.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestAncestoriser.java @@ -8,11 +8,8 @@ import uk.ac.sanger.sccp.stan.service.releasefile.Ancestoriser.SlotSample; import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.IntStream; import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toSet; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.anyCollection; @@ -51,12 +48,12 @@ private void setupSamples() { BioState bioState = EntityFactory.getBioState(); BioState bs2 = new BioState(bioState.getId()+1, "Asleep"); sample = new Sample(1, null, tissue, bioState); - sample1 = new Sample(2, 1, tissue, bioState); - sample2 = new Sample(3, 2, tissue, bioState); + sample1 = new Sample(2, "1", tissue, bioState); + sample2 = new Sample(3, "2", tissue, bioState); Tissue tissue2 = EntityFactory.makeTissue(tissue.getDonor(), EntityFactory.getSpatialLocation()); sampleB = new Sample(4, null, tissue2, bioState); - sampleB1 = new Sample(5, 1, tissue2, bioState); - sampleB1b = new Sample(6, 1, tissue2, bs2); + sampleB1 = new Sample(5, "1", tissue2, bioState); + sampleB1b = new Sample(6, "1", tissue2, bs2); } @Test diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestReleaseFileService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestReleaseFileService.java index 011b88513..febd03971 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestReleaseFileService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/releasefile/TestReleaseFileService.java @@ -107,7 +107,7 @@ private void setupLabware() { Tissue tissue = EntityFactory.getTissue(); BioState bioState = EntityFactory.getBioState(); sample = new Sample(10, null, tissue, bioState); - sample1 = new Sample(11, 1, tissue, bioState); + sample1 = new Sample(11, "1", tissue, bioState); lw1 = EntityFactory.makeLabware(lt); lw1.getFirstSlot().getSamples().addAll(List.of(sample, sample1)); lw1.getSlots().get(1).addSample(sample); @@ -115,12 +115,12 @@ private void setupLabware() { lw2 = EntityFactory.makeLabware(lt, sample); LabwareType ltTOSlide = new LabwareType(1, "Visium TO", 4, 2, null, false); - sample2 = new Sample(12, 1, tissue, bioState); + sample2 = new Sample(12, "1", tissue, bioState); lwTOSlide = EntityFactory.makeLabware(ltTOSlide); lwTOSlide.getFirstSlot().addSample(sample2); LabwareType lt96WellPlate = new LabwareType(2, "96 well plate", 12, 8, null, false); - sample3 = new Sample(13, 1, tissue, bioState); + sample3 = new Sample(13, "1", tissue, bioState); lw96WellPlate = EntityFactory.makeLabware(lt96WellPlate); lw96WellPlate.getFirstSlot().addSample(sample3); } @@ -286,7 +286,7 @@ static Stream checkModeArgs() { .mapToObj(i -> new BioState(i, i==1 ? "Tissue" : i==2 ? "RNA" : "cDNA")) .toArray(BioState[]::new); Sample[] samples = IntStream.range(1,5) - .mapToObj(i -> new Sample(i, i, tissue, bss[Math.min(i, bss.length)-1])) + .mapToObj(i -> new Sample(i, String.valueOf(i), tissue, bss[Math.min(i, bss.length)-1])) .toArray(Sample[]::new); return Stream.of( Arguments.of(List.of(samples[0], samples[1]), ReleaseFileMode.NORMAL), @@ -316,7 +316,7 @@ public void testFindAncestry() { @Test public void testLoadSamples() { setupReleases(); - Sample otherSample = new Sample(800, 3, sample.getTissue(), EntityFactory.getBioState()); + Sample otherSample = new Sample(800, "3", sample.getTissue(), EntityFactory.getBioState()); Integer otherSampleId = otherSample.getId(); Set otherSampleIds = Set.of(otherSampleId); when(mockSampleRepo.getMapByIdIn(otherSampleIds)).thenReturn(Map.of(otherSample.getId(), otherSample)); @@ -464,10 +464,10 @@ public void testLoadSourcesForCDNA() { BioState cdna = new BioState(3, "cDNA"); Tissue tissue = EntityFactory.getTissue(); Sample[] samples = { - new Sample(1, 1, tissue, bs), - new Sample(2, 1, tissue, bs), - new Sample(3, 1, tissue, cdna), - new Sample(4, 1, tissue, cdna), + new Sample(1, "1", tissue, bs), + new Sample(2, "1", tissue, bs), + new Sample(3, "1", tissue, cdna), + new Sample(4, "1", tissue, cdna), }; LabwareType lt = EntityFactory.getTubeType(); Labware[] labware = Arrays.stream(samples) @@ -494,9 +494,9 @@ public void testLoadSourcesForCDNA() { @ValueSource(booleans={false,true}) public void testSelectSourceForCDNA(boolean found) { BioState cdna = new BioState(10, "cDNA"); - Sample sam1 = new Sample(90, 1, EntityFactory.getTissue(), cdna); + Sample sam1 = new Sample(90, "1", EntityFactory.getTissue(), cdna); BioState bs = (found ? new BioState(11, "Feet") : cdna); - Sample sam2 = new Sample(sam1.getId()+1, 10, sam1.getTissue(), bs); + Sample sam2 = new Sample(sam1.getId()+1, "10", sam1.getTissue(), bs); Labware lw1 = EntityFactory.getTube(); Slot slot1 = lw1.getFirstSlot(); Labware lw2 = EntityFactory.makeLabware(lw1.getLabwareType(), sam2); diff --git a/src/test/resources/graphql/confirmsection.graphql b/src/test/resources/graphql/confirmsection.graphql index f1f1a7457..c7bbfabee 100644 --- a/src/test/resources/graphql/confirmsection.graphql +++ b/src/test/resources/graphql/confirmsection.graphql @@ -7,13 +7,13 @@ mutation { confirmSections: [ { destinationAddresses: ["A1", "A2"] - newSection: 14 + newSection: "14" sampleId: 55555 commentIds: [2] } { destinationAddresses: ["B2"] - newSection: 17 + newSection: "17" sampleId: 55556 } ] diff --git a/src/test/resources/graphql/confirmsection_simple.graphql b/src/test/resources/graphql/confirmsection_simple.graphql index f92ac6eec..8382796ae 100644 --- a/src/test/resources/graphql/confirmsection_simple.graphql +++ b/src/test/resources/graphql/confirmsection_simple.graphql @@ -7,7 +7,7 @@ mutation { confirmSections: [ { destinationAddresses: ["A1"] - newSection: 14 + newSection: "14" sampleId: 55555 } ] diff --git a/src/test/resources/graphql/registersections.graphql b/src/test/resources/graphql/registersections.graphql index dc73d1407..a4a322a8f 100644 --- a/src/test/resources/graphql/registersections.graphql +++ b/src/test/resources/graphql/registersections.graphql @@ -13,7 +13,7 @@ mutation { fixative: "None" medium: "None" replicateNumber: "7" - sectionNumber: 8 + sectionNumber: "8" sectionThickness: "12" lifeStage: adult externalIdentifier: "TISSUE1" @@ -30,7 +30,7 @@ mutation { fixative: "None" medium: "None" replicateNumber: "9a" - sectionNumber: 10 + sectionNumber: "10a" sectionThickness: "13" lifeStage: adult externalIdentifier: "TISSUE2" @@ -48,7 +48,7 @@ mutation { fixative: "None" medium: "None" replicateNumber: "8" - sectionNumber: 11 + sectionNumber: "11" sectionThickness: "14.5" lifeStage: adult externalIdentifier: "TISSUE3" diff --git a/src/test/resources/testdata/section_reg.xlsx b/src/test/resources/testdata/section_reg.xlsx index 1b77b7933..f34685bdd 100644 Binary files a/src/test/resources/testdata/section_reg.xlsx and b/src/test/resources/testdata/section_reg.xlsx differ