Skip to content

Commit

Permalink
keeping planned delivieries amount on adatper side implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
adamkulawik committed Nov 29, 2018
1 parent 0508c58 commit 57348e5
Show file tree
Hide file tree
Showing 8 changed files with 135 additions and 14 deletions.
2 changes: 2 additions & 0 deletions delivery-planning-adapters/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ apply plugin: 'jacoco'

dependencies {
compile(project(':delivery-planning-model'))
testCompile 'org.spockframework:spock-core:1.1-groovy-2.4'

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.dddbyexamples.delivery.planning.plan;

import java.time.LocalDate;

import io.dddbyexamples.delivery.planning.Amounts;
import lombok.AllArgsConstructor;

@AllArgsConstructor
class DefaultPlanCompletenessProvider implements PlanCompletenessProvider {

private final InMemoryPlannedAmounts plannedAmounts;

@Override
public PlanCompleteness get(LocalDate date) {
return new PlanCompleteness(date, plannedAmounts.get(date), Amounts.empty(), Amounts.empty());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.dddbyexamples.delivery.planning.plan;

import java.time.LocalDate;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import io.dddbyexamples.delivery.planning.Amounts;

class InMemoryPlannedAmounts {

private final Map<LocalDate, Amounts> amounts = new ConcurrentHashMap<>();

Amounts get(LocalDate date) {
return amounts.computeIfAbsent(date, localDate -> Amounts.empty());
}

void update(LocalDate date, Amounts diff) {
Amounts updatedAmount = this.amounts.computeIfAbsent(date, localDate -> Amounts.empty());

amounts.put(date, updatedAmount.sum(diff));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.dddbyexamples.delivery.planning.plan;

import io.dddbyexamples.delivery.planning.DeliveredAmountsChanged;
import io.dddbyexamples.delivery.planning.DeliveryEvents;
import io.dddbyexamples.delivery.planning.PlanningCompleted;
import lombok.AllArgsConstructor;

@AllArgsConstructor
class SimpleDefaultEvents implements DeliveryEvents {

private final InMemoryPlannedAmounts plannedAmounts;

@Override
public void emit(DeliveredAmountsChanged event) {
plannedAmounts.update(event.getDate(), event.getDiff());
}

@Override
public void emit(PlanningCompleted event) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package io.dddbyexamples.delivery.planning.plan

import io.dddbyexamples.delivery.planning.Amounts
import io.dddbyexamples.delivery.planning.DeliveryPlanningService
import io.dddbyexamples.delivery.planning.delivery.*
import io.dddbyexamples.delivery.planning.delivery.capacity.SimplePayloadCapacityPolicy
import spock.lang.Specification

import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime

class PlanCompletenessSpec extends Specification {

private String refNo = "refNo"

private InMemoryPlannedAmounts amounts = new InMemoryPlannedAmounts()
PlanCompletenessProvider planCompletenessProvider = new DefaultPlanCompletenessProvider(amounts)


DeliveryFactory deliveryFactory = new DeliveryFactory(new SimplePayloadCapacityPolicy(), new SimpleDefaultEvents(amounts))

DeliveryPlanningService deliveryPlanningService = new DeliveryPlanningService(deliveryFactory, new DeliveryRepository() {

Map<Object, Delivery> deliveries = new HashMap<>()

@Override
Delivery get(Object id) {
return deliveries.get(id);
}

@Override
void save(Delivery model) {
deliveries.put(model.getId(), model)
}
},

new PlanRepository() {
@Override
DeliveryPlan get(Object id) {
return null
}

@Override
void save(DeliveryPlan model) {

}
})

private date = LocalDate.now()

Transport transport = new Transport(LocalDateTime.of(date, LocalTime.MIDNIGHT), new TransportType("palette", 22))
Payload payload = new Payload(Collections.singletonList(new Payload.TransportedProduct(refNo, new StorageUnit(refNo, 10), 1)))
Payload editedPayload = new Payload(Collections.singletonList(new Payload.TransportedProduct(refNo, new StorageUnit(refNo, 20), 1)))
private Amounts scheduledAmounts = Amounts.of(refNo, 10)

def 'plan completeness should contain proper plannned amount'() {
when: 'logistician schedules the delivery'
ScheduleDelivery command = new ScheduleDelivery(transport, payload)
UUID uuid = deliveryPlanningService.scheduleDelivery(command)
then: 'delivery planned for the date should be included in plan completeness'
assert planCompletenessProvider.get(date).getPlanned() == scheduledAmounts
when: 'logistician edits the delivery'
EditDelivery editDelivery = new EditDelivery(uuid, transport, editedPayload)
deliveryPlanningService.editDelivery(editDelivery)
then: 'delivery planned for the date should be included in plan completeness'
assert planCompletenessProvider.get(date).getPlanned() == Amounts.of(refNo, 20)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.dddbyexamples.delivery.planning;

import java.util.UUID;

import io.dddbyexamples.delivery.planning.delivery.*;
import io.dddbyexamples.delivery.planning.plan.ClosePlan;
import io.dddbyexamples.delivery.planning.plan.DeliveryPlan;
Expand All @@ -13,12 +15,13 @@ public class DeliveryPlanningService {
private final DeliveryRepository deliveries;
private final PlanRepository plans;

public void scheduleDelivery(ScheduleDelivery command) {
public UUID scheduleDelivery(ScheduleDelivery command) {
Delivery model = factory.createBlankDelivery();
model.editDelivery(
command.asEditFor(model.getId())
);
deliveries.save(model);
return model.getId();
}

public void editDelivery(EditDelivery command) {
Expand Down
Empty file.

This file was deleted.

0 comments on commit 57348e5

Please sign in to comment.