From 296e58a8178dec235e9c7a4fef0a0d41fbde4197 Mon Sep 17 00:00:00 2001 From: Steffengreiner Date: Thu, 24 Nov 2022 11:28:23 +0100 Subject: [PATCH] Feature/dm 589 allow fractions in all products (#341) * DM-589 Allow fractions in all service products * DM-589 Add tests for fractional productItem creation --- .../services/MetabolomicAnalysis.groovy | 2 +- .../business/services/PrimaryAnalysis.groovy | 2 +- .../services/ProteomicAnalysis.groovy | 2 +- .../services/SecondaryAnalysis.groovy | 2 +- .../dtos/business/services/Sequencing.groovy | 2 +- .../dtos/business/ProductItemSpec.groovy | 26 ++++++++++++++++++- 6 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy index 374600ddf..a7d5ad0bc 100644 --- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy +++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/MetabolomicAnalysis.groovy @@ -11,7 +11,7 @@ import life.qbic.datamodel.dtos.business.facilities.Facility * @since 2.4.0 */ @EqualsAndHashCode(callSuper = true) -class MetabolomicAnalysis extends AtomicProduct { +class MetabolomicAnalysis extends PartialProduct { /** * Basic product constructor. * diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy index 58033d06e..93211068d 100644 --- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy +++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/PrimaryAnalysis.groovy @@ -11,7 +11,7 @@ import life.qbic.datamodel.dtos.business.facilities.Facility * @since 1.12.0 */ @EqualsAndHashCode(callSuper = true) -class PrimaryAnalysis extends AtomicProduct { +class PrimaryAnalysis extends PartialProduct { /** * Basic product constructor. * diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy index 57b2e444a..09093ac9f 100644 --- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy +++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/ProteomicAnalysis.groovy @@ -11,7 +11,7 @@ import life.qbic.datamodel.dtos.business.facilities.Facility * @since 2.4.0 */ @EqualsAndHashCode(callSuper = true) -class ProteomicAnalysis extends AtomicProduct { +class ProteomicAnalysis extends PartialProduct { /** * Basic product constructor. diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy index a436d1581..a5b8fb528 100644 --- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy +++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/SecondaryAnalysis.groovy @@ -12,7 +12,7 @@ import life.qbic.datamodel.dtos.business.facilities.Facility * @since 1.12.0 */ @EqualsAndHashCode(callSuper = true) -class SecondaryAnalysis extends AtomicProduct { +class SecondaryAnalysis extends PartialProduct { /** * Basic product constructor. * diff --git a/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy b/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy index 4803246be..377171609 100644 --- a/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy +++ b/src/main/groovy/life/qbic/datamodel/dtos/business/services/Sequencing.groovy @@ -11,7 +11,7 @@ import life.qbic.datamodel.dtos.business.facilities.Facility * @since 1.12.0 */ @EqualsAndHashCode(callSuper = true) -class Sequencing extends AtomicProduct { +class Sequencing extends PartialProduct { /** * Basic product constructor. * diff --git a/src/test/groovy/life/qbic/datamodel/dtos/business/ProductItemSpec.groovy b/src/test/groovy/life/qbic/datamodel/dtos/business/ProductItemSpec.groovy index 99a15799d..a9aba0b28 100644 --- a/src/test/groovy/life/qbic/datamodel/dtos/business/ProductItemSpec.groovy +++ b/src/test/groovy/life/qbic/datamodel/dtos/business/ProductItemSpec.groovy @@ -1,9 +1,15 @@ package life.qbic.datamodel.dtos.business import life.qbic.datamodel.dtos.business.facilities.Facility +import life.qbic.datamodel.dtos.business.services.DataStorage +import life.qbic.datamodel.dtos.business.services.ExternalServiceProduct +import life.qbic.datamodel.dtos.business.services.MetabolomicAnalysis import life.qbic.datamodel.dtos.business.services.PrimaryAnalysis import life.qbic.datamodel.dtos.business.services.Product import life.qbic.datamodel.dtos.business.services.ProductUnit +import life.qbic.datamodel.dtos.business.services.ProjectManagement +import life.qbic.datamodel.dtos.business.services.ProteomicAnalysis +import life.qbic.datamodel.dtos.business.services.SecondaryAnalysis import life.qbic.datamodel.dtos.business.services.Sequencing import spock.lang.Specification import spock.lang.Unroll @@ -101,5 +107,23 @@ class ProductItemSpec extends Specification { product.currency.displayName == "Euro" } - + def "ProductItems allow partial quantities for all services"() { + + when: "ProductItems for all service products can be created" + ProductItem productItem = new ProductItem(quantity, product, totalPrice, quantityDiscount) + + then: "No exceptions are thrown" + noExceptionThrown() + + where: "for every service product" + quantity | internalUnitPrice | product | totalPrice | quantityDiscount + 1.1 | 1 | new Sequencing("Sequencing", "Sequencing description", 1.0, 3.0, ProductUnit.PER_SAMPLE, 1, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 2.2 | 2 | new PrimaryAnalysis("Primary Analysis", "Primary Analysis description", 2.0, 4.0, ProductUnit.PER_CYCLE, 2, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 3.3 | 3 | new SecondaryAnalysis("Secondary Analysis", "Secondary Analysis description", 3.0, 5.0, ProductUnit.PER_DATASET, 3, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 4.4 | 4 | new ProteomicAnalysis("Proteomic Analysis", "Proteomic Analysis description", 4.0, 6.0, ProductUnit.PER_FLOW_CELL, 4, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 5.5 | 5 | new MetabolomicAnalysis("Metabolomic Analysis", "Metabolomic Analysis description", 5.0, 7.0, ProductUnit.PER_100_MICROGRAM_PEPTIDE_CHANNEL, 5, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 6.6 | 6 | new ProjectManagement("Project Management", "Project Management description", 6.0, 8.0, ProductUnit.PER_HOUR, 6, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 7.7 | 7 | new DataStorage("Data Storage", "Data Storage description", 7.0, 9.0, ProductUnit.PER_GIGABYTE, 7, Facility.QBIC) | quantity * internalUnitPrice | 0.0 + 8.8 | 8 | new ExternalServiceProduct("External Service", "External Service description", 8.0, 10.0, ProductUnit.PER_PROJECT, 8, Facility.CEGAT) | quantity * 10 | 0.0 + } }