Review Comment Incorporation
This commit is contained in:
parent
db2bb252de
commit
a0d82c25e3
@ -12,10 +12,10 @@ public class ApplicationRunner {
|
|||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
ApplicationContext context = new AnnotationConfigApplicationContext(TaxiFareConfiguration.class);
|
ApplicationContext context = new AnnotationConfigApplicationContext(TaxiFareConfiguration.class);
|
||||||
TaxiFareCalculatorService orderService = context.getBean(TaxiFareCalculatorService.class);
|
TaxiFareCalculatorService orderService = (TaxiFareCalculatorService) context.getBean(TaxiFareCalculatorService.class);
|
||||||
|
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(true);
|
taxiRide.setIsNightSurcharge(true);
|
||||||
taxiRide.setDistanceInMile(190L);
|
taxiRide.setDistanceInMile(190L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
orderService.calculateFare(taxiRide, rideFare);
|
orderService.calculateFare(taxiRide, rideFare);
|
||||||
|
@ -4,10 +4,12 @@ public class Fare {
|
|||||||
|
|
||||||
private Long nightSurcharge;
|
private Long nightSurcharge;
|
||||||
private Long rideFare;
|
private Long rideFare;
|
||||||
|
private Long totalFare;
|
||||||
|
|
||||||
public Fare() {
|
public Fare() {
|
||||||
nightSurcharge = 0L;
|
nightSurcharge = 0L;
|
||||||
rideFare = 0L;
|
rideFare = 0L;
|
||||||
|
totalFare = 0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getNightSurcharge() {
|
public Long getNightSurcharge() {
|
||||||
@ -29,4 +31,5 @@ public class Fare {
|
|||||||
public Long getTotalFare() {
|
public Long getTotalFare() {
|
||||||
return nightSurcharge + rideFare;
|
return nightSurcharge + rideFare;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,15 @@ package com.baeldung.spring.drools.model;
|
|||||||
|
|
||||||
public class TaxiRide {
|
public class TaxiRide {
|
||||||
|
|
||||||
private Boolean bNightSurcharge;
|
private Boolean isNightSurcharge;
|
||||||
private Long distanceInMile;
|
private Long distanceInMile;
|
||||||
|
|
||||||
public Boolean getbNightSurcharge() {
|
public Boolean getIsNightSurcharge() {
|
||||||
return bNightSurcharge;
|
return isNightSurcharge;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setbNightSurcharge(Boolean bNightSurcharge) {
|
public void setIsNightSurcharge(Boolean isNightSurcharge) {
|
||||||
this.bNightSurcharge = bNightSurcharge;
|
this.isNightSurcharge = isNightSurcharge;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getDistanceInMile() {
|
public Long getDistanceInMile() {
|
||||||
|
@ -3,17 +3,19 @@ package com.baeldung.spring.drools.service;
|
|||||||
import org.kie.api.runtime.KieContainer;
|
import org.kie.api.runtime.KieContainer;
|
||||||
import org.kie.api.runtime.KieSession;
|
import org.kie.api.runtime.KieSession;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.baeldung.spring.drools.model.Fare;
|
import com.baeldung.spring.drools.model.Fare;
|
||||||
import com.baeldung.spring.drools.model.TaxiRide;
|
import com.baeldung.spring.drools.model.TaxiRide;
|
||||||
|
|
||||||
|
@Service
|
||||||
public class TaxiFareCalculatorService {
|
public class TaxiFareCalculatorService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private KieContainer kieContainer;
|
private KieContainer kContainer;
|
||||||
|
|
||||||
public Long calculateFare(TaxiRide taxiRide, Fare rideFare) {
|
public Long calculateFare(TaxiRide taxiRide, Fare rideFare) {
|
||||||
KieSession kieSession = kieContainer.newKieSession();
|
KieSession kieSession = kContainer.newKieSession();
|
||||||
kieSession.setGlobal("rideFare", rideFare);
|
kieSession.setGlobal("rideFare", rideFare);
|
||||||
kieSession.insert(taxiRide);
|
kieSession.insert(taxiRide);
|
||||||
kieSession.fireAllRules();
|
kieSession.fireAllRules();
|
||||||
|
@ -5,15 +5,16 @@ import org.kie.api.builder.KieBuilder;
|
|||||||
import org.kie.api.builder.KieFileSystem;
|
import org.kie.api.builder.KieFileSystem;
|
||||||
import org.kie.api.builder.KieModule;
|
import org.kie.api.builder.KieModule;
|
||||||
import org.kie.api.runtime.KieContainer;
|
import org.kie.api.runtime.KieContainer;
|
||||||
import org.kie.api.runtime.KieSession;
|
|
||||||
import org.kie.internal.io.ResourceFactory;
|
import org.kie.internal.io.ResourceFactory;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@ComponentScan("com.baeldung.spring.drools.service")
|
||||||
public class TaxiFareConfiguration {
|
public class TaxiFareConfiguration {
|
||||||
|
|
||||||
private static final String drlFile = "TAXI_FARE_RULE.drl";
|
public static final String drlFile = "TAXI_FARE_RULE.drl";
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public KieContainer kieContainer() {
|
public KieContainer kieContainer() {
|
||||||
@ -26,10 +27,6 @@ public class TaxiFareConfiguration {
|
|||||||
KieModule kieModule = kieBuilder.getKieModule();
|
KieModule kieModule = kieBuilder.getKieModule();
|
||||||
|
|
||||||
return kieServices.newKieContainer(kieModule.getReleaseId());
|
return kieServices.newKieContainer(kieModule.getReleaseId());
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public TaxiFareCalculatorService taxiFareCalculatorService() {
|
|
||||||
return new TaxiFareCalculatorService();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ dialect "mvel"
|
|||||||
|
|
||||||
rule "Calculate Taxi Fare - Scenario 1"
|
rule "Calculate Taxi Fare - Scenario 1"
|
||||||
when
|
when
|
||||||
taxiRideInstance:TaxiRide(bNightSurcharge == false && distanceInMile < 10);
|
taxiRideInstance:TaxiRide(isNightSurcharge == false && distanceInMile < 10);
|
||||||
then
|
then
|
||||||
rideFare.setNightSurcharge(0);
|
rideFare.setNightSurcharge(0);
|
||||||
rideFare.setRideFare(70);
|
rideFare.setRideFare(70);
|
||||||
@ -15,7 +15,7 @@ end
|
|||||||
|
|
||||||
rule "Calculate Taxi Fare - Scenario 2"
|
rule "Calculate Taxi Fare - Scenario 2"
|
||||||
when
|
when
|
||||||
taxiRideInstance:TaxiRide(bNightSurcharge == true && distanceInMile < 10);
|
taxiRideInstance:TaxiRide(isNightSurcharge == true && distanceInMile < 10);
|
||||||
then
|
then
|
||||||
rideFare.setNightSurcharge(30);
|
rideFare.setNightSurcharge(30);
|
||||||
rideFare.setRideFare(70);
|
rideFare.setRideFare(70);
|
||||||
@ -24,7 +24,7 @@ end
|
|||||||
|
|
||||||
rule "Calculate Taxi Fare - Scenario 3"
|
rule "Calculate Taxi Fare - Scenario 3"
|
||||||
when
|
when
|
||||||
taxiRideInstance:TaxiRide(bNightSurcharge == false && distanceInMile >= 10 && distanceInMile < 100);
|
taxiRideInstance:TaxiRide(isNightSurcharge == false && distanceInMile >= 10 && distanceInMile < 100);
|
||||||
then
|
then
|
||||||
rideFare.setNightSurcharge(0);
|
rideFare.setNightSurcharge(0);
|
||||||
rideFare.setRideFare(70+(2*taxiRideInstance.getDistanceInMile()));
|
rideFare.setRideFare(70+(2*taxiRideInstance.getDistanceInMile()));
|
||||||
@ -33,7 +33,7 @@ end
|
|||||||
|
|
||||||
rule "Calculate Taxi Fare - Scenario 4"
|
rule "Calculate Taxi Fare - Scenario 4"
|
||||||
when
|
when
|
||||||
taxiRideInstance:TaxiRide(bNightSurcharge == true && distanceInMile >= 10 && distanceInMile < 100);
|
taxiRideInstance:TaxiRide(isNightSurcharge == true && distanceInMile >= 10 && distanceInMile < 100);
|
||||||
then
|
then
|
||||||
rideFare.setNightSurcharge(30+taxiRideInstance.getDistanceInMile());
|
rideFare.setNightSurcharge(30+taxiRideInstance.getDistanceInMile());
|
||||||
rideFare.setRideFare(70+(2*taxiRideInstance.getDistanceInMile()));
|
rideFare.setRideFare(70+(2*taxiRideInstance.getDistanceInMile()));
|
||||||
@ -42,7 +42,7 @@ end
|
|||||||
|
|
||||||
rule "Calculate Taxi Fare - Scenario 5"
|
rule "Calculate Taxi Fare - Scenario 5"
|
||||||
when
|
when
|
||||||
taxiRideInstance:TaxiRide(bNightSurcharge == false && distanceInMile >= 100);
|
taxiRideInstance:TaxiRide(isNightSurcharge == false && distanceInMile >= 100);
|
||||||
then
|
then
|
||||||
rideFare.setNightSurcharge(0);
|
rideFare.setNightSurcharge(0);
|
||||||
rideFare.setRideFare(70+(1.5*taxiRideInstance.getDistanceInMile()));
|
rideFare.setRideFare(70+(1.5*taxiRideInstance.getDistanceInMile()));
|
||||||
@ -50,7 +50,7 @@ end
|
|||||||
|
|
||||||
rule "Calculate Taxi Fare - Scenario 6"
|
rule "Calculate Taxi Fare - Scenario 6"
|
||||||
when
|
when
|
||||||
taxiRideInstance:TaxiRide(bNightSurcharge == true && distanceInMile >= 100);
|
taxiRideInstance:TaxiRide(isNightSurcharge == true && distanceInMile >= 100);
|
||||||
then
|
then
|
||||||
rideFare.setNightSurcharge(30+taxiRideInstance.getDistanceInMile());
|
rideFare.setNightSurcharge(30+taxiRideInstance.getDistanceInMile());
|
||||||
rideFare.setRideFare(70+(1.5*taxiRideInstance.getDistanceInMile()));
|
rideFare.setRideFare(70+(1.5*taxiRideInstance.getDistanceInMile()));
|
||||||
|
@ -17,78 +17,72 @@ import static org.junit.Assert.assertNotNull;
|
|||||||
public class TaxiFareCalculatorServiceIntegrationTest {
|
public class TaxiFareCalculatorServiceIntegrationTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TaxiFareCalculatorService taxiFareCalculatorService;
|
TaxiFareCalculatorService taxiFareCalculatorService;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateFareScenario1() {
|
public void whenNightSurchargeFalseAndDistanceLessThan10_thenFixFareWithoutNightSurcharge() {
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(false);
|
taxiRide.setIsNightSurcharge(false);
|
||||||
taxiRide.setDistanceInMile(9L);
|
taxiRide.setDistanceInMile(9L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
||||||
|
Assert.assertNotNull(totalCharge);
|
||||||
assertNotNull(totalCharge);
|
Assert.assertEquals(Long.valueOf(70), totalCharge);
|
||||||
assertEquals(Long.valueOf(70), totalCharge);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateFareScenario2() {
|
public void whenNightSurchargeTrueAndDistanceLessThan10_thenFixFareWithNightSurcharge() {
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(true);
|
taxiRide.setIsNightSurcharge(true);
|
||||||
taxiRide.setDistanceInMile(5L);
|
taxiRide.setDistanceInMile(5L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
||||||
|
Assert.assertNotNull(totalCharge);
|
||||||
assertNotNull(totalCharge);
|
Assert.assertEquals(Long.valueOf(100), totalCharge);
|
||||||
assertEquals(Long.valueOf(100), totalCharge);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateFareScenario3() {
|
public void whenNightSurchargeFalseAndDistanceLessThan100_thenDoubleFareWithoutNightSurcharge() {
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(false);
|
taxiRide.setIsNightSurcharge(false);
|
||||||
taxiRide.setDistanceInMile(50L);
|
taxiRide.setDistanceInMile(50L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
||||||
|
Assert.assertNotNull(totalCharge);
|
||||||
assertNotNull(totalCharge);
|
Assert.assertEquals(Long.valueOf(170), totalCharge);
|
||||||
assertEquals(Long.valueOf(170), totalCharge);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateFareScenario4() {
|
public void whenNightSurchargeTrueAndDistanceLessThan100_thenDoubleFareWithNightSurcharge() {
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(true);
|
taxiRide.setIsNightSurcharge(true);
|
||||||
taxiRide.setDistanceInMile(50L);
|
taxiRide.setDistanceInMile(50L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
||||||
|
Assert.assertNotNull(totalCharge);
|
||||||
assertNotNull(totalCharge);
|
Assert.assertEquals(Long.valueOf(250), totalCharge);
|
||||||
assertEquals(Long.valueOf(250), totalCharge);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateFareScenario5() {
|
public void whenNightSurchargeFalseAndDistanceGreaterThan100_thenExtraPercentFareWithoutNightSurcharge() {
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(false);
|
taxiRide.setIsNightSurcharge(false);
|
||||||
taxiRide.setDistanceInMile(100L);
|
taxiRide.setDistanceInMile(100L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
||||||
|
Assert.assertNotNull(totalCharge);
|
||||||
assertNotNull(totalCharge);
|
Assert.assertEquals(Long.valueOf(220), totalCharge);
|
||||||
assertEquals(Long.valueOf(220), totalCharge);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateFareScenario6() {
|
public void whenNightSurchargeTrueAndDistanceGreaterThan100_thenExtraPercentFareWithNightSurcharge() {
|
||||||
TaxiRide taxiRide = new TaxiRide();
|
TaxiRide taxiRide = new TaxiRide();
|
||||||
taxiRide.setbNightSurcharge(true);
|
taxiRide.setIsNightSurcharge(true);
|
||||||
taxiRide.setDistanceInMile(100L);
|
taxiRide.setDistanceInMile(100L);
|
||||||
Fare rideFare = new Fare();
|
Fare rideFare = new Fare();
|
||||||
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare);
|
||||||
|
Assert.assertNotNull(totalCharge);
|
||||||
assertNotNull(totalCharge);
|
Assert.assertEquals(Long.valueOf(350), totalCharge);
|
||||||
assertEquals(Long.valueOf(350), totalCharge);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user