createUser(); $this->em->persist(new UserTourProgress($user, 'appointments', 1)); $this->em->persist(new UserTourProgress($user, 'patients', 3)); $this->em->flush(); /** @var UserTourProgressRepository $repo */ $repo = $this->em->getRepository(UserTourProgress::class); self::assertSame(['appointments' => 1, 'patients' => 3], $repo->seenMap($user)); } public function testSeenMapIsScopedToTheUser(): void { $user = $this->createUser(); $other = $this->createUser(); $this->em->persist(new UserTourProgress($other, 'appointments', 1)); $this->em->flush(); /** @var UserTourProgressRepository $repo */ $repo = $this->em->getRepository(UserTourProgress::class); self::assertSame([], $repo->seenMap($user)); } public function testTheSameTourCannotBeStoredTwiceForOneUser(): void { $user = $this->createUser(); $this->em->persist(new UserTourProgress($user, 'appointments', 1)); $this->em->flush(); $this->em->persist(new UserTourProgress($user, 'appointments', 2)); $this->expectException(UniqueConstraintViolationException::class); $this->em->flush(); } public function testMarkSeenNeverLowersTheStoredVersion(): void { $user = $this->createUser(); $progress = new UserTourProgress($user, 'appointments', 4); $progress->markSeen(2); self::assertSame(4, $progress->getVersion()); } }