Classes

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 10 20 30 Line Coverage (%) Cyclomatic Complexity App\Identity\Domain\User — Coverage: 100.0% | Lines: 52 | Complexity: 26 App\Identity\Domain\ValueObject\BirthDate — Coverage: 100.0% | Lines: 13 | Complexity: 10 App\Identity\Domain\UserIdentity — Coverage: 100.0% | Lines: 6 | Complexity: 6 App\Identity\Domain\ValueObject\Email — Coverage: 100.0% | Lines: 5 | Complexity: 5 App\Identity\Domain\ValueObject\HashedPassword — Coverage: 100.0% | Lines: 4 | Complexity: 4 App\Identity\Domain\Exceptions\AdminSelfAction — Coverage: 100.0% | Lines: 3 | Complexity: 3 App\Identity\Domain\Exceptions\EmailAlreadyInUse — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\InvalidCurrentPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\UserNotFound — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\WeakPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1

Methods

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 1 2 3 4 Line Coverage (%) Cyclomatic Complexity App\Identity\Domain\User::register — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Identity\Domain\User::registerWithoutPassword — Coverage: 100.0% | Lines: 11 | Complexity: 1 App\Identity\Domain\ValueObject\BirthDate::__construct — Coverage: 100.0% | Lines: 7 | Complexity: 3 App\Identity\Domain\User::update — Coverage: 100.0% | Lines: 6 | Complexity: 1 App\Identity\Domain\User::sanitizeName — Coverage: 100.0% | Lines: 5 | Complexity: 3 App\Identity\Domain\UserIdentity::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Identity\Domain\ValueObject\BirthDate::age — Coverage: 100.0% | Lines: 2 | Complexity: 1 App\Identity\Domain\ValueObject\Email::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Identity\Domain\ValueObject\HashedPassword::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 2 App\Identity\Domain\Exceptions\AdminSelfAction::cannotRevokeSelf — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\AdminSelfAction::cannotDeleteSelf — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\AdminSelfAction::cannotSuspendSelf — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\EmailAlreadyInUse::of — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\InvalidCurrentPassword::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\UserNotFound::of — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\Exceptions\WeakPassword::of — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::changePassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::grantAdmin — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::revokeAdmin — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::isAdmin — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::suspend — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::activate — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::status — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::id — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::email — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::password — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::hasPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::preferredCurrency — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::name — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::surnames — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::birthDate — Coverage: 100.0% | Lines: 1 | Complexity: 2 App\Identity\Domain\User::createdAt — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::avatarName — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\User::changeAvatar — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\UserIdentity::provider — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\UserIdentity::subject — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\UserIdentity::userId — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\UserIdentity::createdAt — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\BirthDate::fromDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\BirthDate::fromNullable — Coverage: 100.0% | Lines: 1 | Complexity: 3 App\Identity\Domain\ValueObject\BirthDate::toDateTimeImmutable — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\BirthDate::value — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\Email::__toString — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\Email::value — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\Email::equals — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\HashedPassword::__toString — Coverage: 100.0% | Lines: 1 | Complexity: 1 App\Identity\Domain\ValueObject\HashedPassword::value — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Method CRAP Coverage
App\Identity\Domain\User::sanitizeName3100.0%
App\Identity\Domain\ValueObject\BirthDate::__construct3100.0%
App\Identity\Domain\ValueObject\BirthDate::fromNullable3100.0%
App\Identity\Domain\User::birthDate2100.0%
App\Identity\Domain\UserIdentity::__construct2100.0%
App\Identity\Domain\ValueObject\Email::__construct2100.0%
App\Identity\Domain\ValueObject\HashedPassword::__construct2100.0%
App\Identity\Domain\Exceptions\AdminSelfAction::cannotRevokeSelf1100.0%
App\Identity\Domain\Exceptions\AdminSelfAction::cannotDeleteSelf1100.0%
App\Identity\Domain\Exceptions\AdminSelfAction::cannotSuspendSelf1100.0%
App\Identity\Domain\Exceptions\EmailAlreadyInUse::of1100.0%
App\Identity\Domain\Exceptions\InvalidCurrentPassword::create1100.0%
App\Identity\Domain\Exceptions\UserNotFound::of1100.0%
App\Identity\Domain\Exceptions\WeakPassword::of1100.0%
App\Identity\Domain\User::__construct1100.0%
App\Identity\Domain\User::register1100.0%
App\Identity\Domain\User::registerWithoutPassword1100.0%
App\Identity\Domain\User::update1100.0%
App\Identity\Domain\User::changePassword1100.0%
App\Identity\Domain\User::grantAdmin1100.0%
App\Identity\Domain\User::revokeAdmin1100.0%
App\Identity\Domain\User::isAdmin1100.0%
App\Identity\Domain\User::suspend1100.0%
App\Identity\Domain\User::activate1100.0%
App\Identity\Domain\User::status1100.0%
App\Identity\Domain\User::id1100.0%
App\Identity\Domain\User::email1100.0%
App\Identity\Domain\User::password1100.0%
App\Identity\Domain\User::hasPassword1100.0%
App\Identity\Domain\User::preferredCurrency1100.0%
App\Identity\Domain\User::name1100.0%
App\Identity\Domain\User::surnames1100.0%
App\Identity\Domain\User::createdAt1100.0%
App\Identity\Domain\User::avatarName1100.0%
App\Identity\Domain\User::changeAvatar1100.0%
App\Identity\Domain\UserIdentity::provider1100.0%
App\Identity\Domain\UserIdentity::subject1100.0%
App\Identity\Domain\UserIdentity::userId1100.0%
App\Identity\Domain\UserIdentity::createdAt1100.0%
App\Identity\Domain\ValueObject\BirthDate::fromDate1100.0%
App\Identity\Domain\ValueObject\BirthDate::age1100.0%
App\Identity\Domain\ValueObject\BirthDate::toDateTimeImmutable1100.0%
App\Identity\Domain\ValueObject\BirthDate::value1100.0%
App\Identity\Domain\ValueObject\Email::__toString1100.0%
App\Identity\Domain\ValueObject\Email::value1100.0%
App\Identity\Domain\ValueObject\Email::equals1100.0%
App\Identity\Domain\ValueObject\HashedPassword::__toString1100.0%
App\Identity\Domain\ValueObject\HashedPassword::value1100.0%