You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/06/04 05:28:11 UTC

(causeway-app-petclinic) tag tags/v3/09-02-adds-visit-fixture created (now 3955d22)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to tag tags/v3/09-02-adds-visit-fixture
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git


      at 3955d22  (commit)
This tag includes the following new commits:

     new e774f24  adds Visit_persona
     new 903504d  updates DomainAppDemo to create visits as well as pet owners/pets
     new 3955d22  updates javax to jakarta

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(causeway-app-petclinic) 02/03: updates DomainAppDemo to create visits as well as pet owners/pets

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to tag tags/v3/09-02-adds-visit-fixture
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git

commit 903504d41dee4460031444f850675d710d6c2c3d
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 3 14:17:43 2024 +0100

    updates DomainAppDemo to create visits as well as pet owners/pets
---
 .../domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java b/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java
index 6964593..32b8c67 100644
--- a/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java
+++ b/webapp/src/main/java/domainapp/webapp/application/fixture/scenarios/DomainAppDemo.java
@@ -5,14 +5,14 @@ import jakarta.inject.Inject;
 import org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.causeway.testing.fixtures.applib.modules.ModuleWithFixturesService;
 
-import domainapp.modules.petowner.fixture.PetOwner_persona;
+import domainapp.modules.visit.fixture.Visit_persona;
 
 public class DomainAppDemo extends FixtureScript {
 
     @Override
     protected void execute(final ExecutionContext ec) {
         ec.executeChildren(this, moduleWithFixturesService.getTeardownFixture());
-        ec.executeChild(this, new PetOwner_persona.PersistAll());
+        ec.executeChild(this, new Visit_persona.PersistAll());
     }
 
     @Inject ModuleWithFixturesService moduleWithFixturesService;


(causeway-app-petclinic) 03/03: updates javax to jakarta

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to tag tags/v3/09-02-adds-visit-fixture
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git

commit 3955d227160e37dbce6a581188fbf5785707a3e6
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 3 14:20:29 2024 +0100

    updates javax to jakarta
---
 .../src/main/java/domainapp/modules/visit/fixture/Visit_persona.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java b/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java
index 5b33da9..295a9a7 100644
--- a/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java
+++ b/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java
@@ -4,7 +4,7 @@ import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Optional;
 
-import javax.inject.Inject;
+import jakarta.inject.Inject;
 
 import org.apache.causeway.applib.services.wrapper.control.SyncControl;
 


(causeway-app-petclinic) 01/03: adds Visit_persona

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to tag tags/v3/09-02-adds-visit-fixture
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git

commit e774f2406c064ae5342b6d9f66723fbda7c9a77a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 3 14:16:46 2024 +0100

    adds Visit_persona
    
    creates a random number of visits for each pet
---
 .../modules/visit/fixture/Visit_persona.java       | 131 +++++++++++++++++++++
 1 file changed, 131 insertions(+)

diff --git a/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java b/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java
new file mode 100644
index 0000000..5b33da9
--- /dev/null
+++ b/module-visit/src/main/java/domainapp/modules/visit/fixture/Visit_persona.java
@@ -0,0 +1,131 @@
+package domainapp.modules.visit.fixture;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.services.wrapper.control.SyncControl;
+
+import org.apache.causeway.applib.services.clock.ClockService;
+import org.apache.causeway.applib.services.registry.ServiceRegistry;
+import org.apache.causeway.testing.fakedata.applib.services.FakeDataService;
+import org.apache.causeway.testing.fixtures.applib.personas.BuilderScriptWithResult;
+import org.apache.causeway.testing.fixtures.applib.personas.Persona;
+import org.apache.causeway.testing.fixtures.applib.setup.PersonaEnumPersistAll;
+
+import domainapp.modules.petowner.fixture.PetOwner_persona;
+import domainapp.modules.visit.contributions.PetOwner_bookVisit;
+import domainapp.modules.visit.contributions.PetOwner_visits;
+import domainapp.modules.visit.dom.visit.Visit;
+
+import domainapp.modules.visit.dom.visit.VisitRepository;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import lombok.val;
+import lombok.experimental.Accessors;
+
+import domainapp.modules.petowner.dom.petowner.PetOwner;
+
+/**
+ * Returns the most recent Visit, or the one scheduled.
+ */
+@RequiredArgsConstructor
+public enum Visit_persona
+implements Persona<Visit, Visit_persona.Builder> {
+
+    JAMAL_VISITS(PetOwner_persona.JAMAL),
+    CAMILA_VISITS(PetOwner_persona.CAMILA),
+    ARJUN_VISITS(PetOwner_persona.ARJUN),
+    NIA_VISITS(PetOwner_persona.NIA),
+    OLIVIA_VISITS(PetOwner_persona.OLIVIA),
+    LEILA_VISITS(PetOwner_persona.LEILA),
+    MATT_VISITS(PetOwner_persona.MATT),
+    BENJAMIN_VISITS(PetOwner_persona.BENJAMIN),
+    JESSICA_VISITS(PetOwner_persona.JESSICA),
+    DANIEL_VISITS(PetOwner_persona.DANIEL);
+
+    private final PetOwner_persona petOwner_p;
+
+    @Override
+    public Builder builder() {
+        return new Builder().setPersona(this);
+    }
+
+    @Override
+    public Visit findUsing(final ServiceRegistry serviceRegistry) {
+        final var owner = petOwner_p.findUsing(serviceRegistry);
+        final var visits = serviceRegistry.lookupService(VisitRepository.class)
+                .map(x -> x.findByPetOwner(owner))
+                .orElseThrow();
+        return lastOf(visits);
+    }
+
+    private static Visit lastOf(List<Visit> visits) {
+        return visits.get(visits.size()-1);
+    }
+
+    @Accessors(chain = true)
+    public static class Builder extends BuilderScriptWithResult<Visit> {
+
+        @Getter @Setter private Visit_persona persona;
+
+        @Override
+        protected Visit buildResult(final ExecutionContext ec) {
+
+            final var petOwner = ec.executeChildT(this, persona.petOwner_p);
+
+            petOwner.getPets().forEach(pet -> {
+
+                // in the past
+                final var numVisits = fakeDataService.ints().between(2, 4);
+                for (var i = 0; i < numVisits; i++) {
+                    final var daysAgo = fakeDataService.ints().between(5, 500);
+                    final var minsInTheDay = randomAppointmentTime();
+                    final var appointmentTime = randomAppointmentTimeFromToday(-daysAgo, minsInTheDay);
+                    wrapperFactory.wrapMixin(PetOwner_bookVisit.class, petOwner, SyncControl.control().withSkipRules()).act(pet, appointmentTime);
+                }
+
+                // in the future
+                if (fakeDataService.booleans().coinFlip()) {
+                    final var daysAhead = fakeDataService.ints().between(1, 10);
+                    final var minsInTheDay = randomAppointmentTime();
+                    final var appointmentTime = randomAppointmentTimeFromToday(daysAhead, minsInTheDay);
+                    wrapperFactory.wrapMixin(PetOwner_bookVisit.class, petOwner, SyncControl.control().withSkipRules()).act(pet, appointmentTime);
+                }
+            });
+
+            final var numDaysAgo = fakeDataService.ints().between(2, 100);
+            final var lastVisit = clockService.getClock().nowAsLocalDate().minusDays(numDaysAgo);
+            petOwner.setLastVisit(lastVisit);
+
+            final var visits = wrapperFactory.wrapMixin(PetOwner_visits.class, petOwner, SyncControl.control().withSkipRules()).coll();
+            return lastOf(visits);
+        }
+
+        private LocalDateTime randomAppointmentTimeFromToday(int days, int appointmentTime) {
+            return clockService.getClock().nowAsLocalDate().atStartOfDay().plusDays(days).plusMinutes(appointmentTime);
+        }
+
+        private int randomAppointmentTime() {
+            return (9 * 60) + (fakeDataService.ints().between(0, 32) * 15);
+        }
+
+        // -- DEPENDENCIES
+
+        @Inject ClockService clockService;
+        @Inject FakeDataService fakeDataService;
+    }
+
+    public static class PersistAll
+            extends PersonaEnumPersistAll<Visit, Visit_persona, Builder> {
+        public PersistAll() {
+            super(Visit_persona.class);
+        }
+    }
+
+
+}