TOTP: introduce new interface that prevents code reuse #108
integrate.yml
on: pull_request
3️⃣ Static Analysis
16s
4️⃣ Coding Standards
24s
5️⃣ Mutation Testing
58s
6️⃣ Rector Checkstyle
16s
7️⃣ Exported files
4s
Matrix: 2️⃣ Unit and functional tests
Annotations
1 error and 10 warnings
4️⃣ Coding Standards
Process completed with exit code 2.
|
5️⃣ Mutation Testing:
src/Factory.php#L24
Escaped Mutant for Mutator "Throw_":
@@ @@
{
try {
$parsed_url = Url::fromString($uri);
- $parsed_url->getScheme() === 'otpauth' || throw new InvalidArgumentException('Invalid scheme.');
+ $parsed_url->getScheme() === 'otpauth' || new InvalidArgumentException('Invalid scheme.');
} catch (Throwable $throwable) {
throw new InvalidArgumentException('Not a valid OTP provisioning URI', $throwable->getCode(), $throwable);
}
|
5️⃣ Mutation Testing:
src/Factory.php#L24
Escaped Mutant for Mutator "LogicalOrNegation":
@@ @@
{
try {
$parsed_url = Url::fromString($uri);
- $parsed_url->getScheme() === 'otpauth' || throw new InvalidArgumentException('Invalid scheme.');
+ !($parsed_url->getScheme() === 'otpauth' || throw new InvalidArgumentException('Invalid scheme.'));
} catch (Throwable $throwable) {
throw new InvalidArgumentException('Not a valid OTP provisioning URI', $throwable->getCode(), $throwable);
}
|
5️⃣ Mutation Testing:
src/Factory.php#L63
Escaped Mutant for Mutator "LogicalOrNegation":
@@ @@
return;
}
if ($otp->getIssuer() !== null) {
- $result[0] === $otp->getIssuer() || throw new InvalidArgumentException('Invalid OTP: invalid issuer in parameter');
+ !($result[0] === $otp->getIssuer() || throw new InvalidArgumentException('Invalid OTP: invalid issuer in parameter'));
$otp->setIssuerIncludedAsParameter(true);
}
assert($result[0] !== '');
|
5️⃣ Mutation Testing:
src/Factory.php#L66
Escaped Mutant for Mutator "MethodCallRemoval":
@@ @@
}
if ($otp->getIssuer() !== null) {
$result[0] === $otp->getIssuer() || throw new InvalidArgumentException('Invalid OTP: invalid issuer in parameter');
- $otp->setIssuerIncludedAsParameter(true);
+
}
assert($result[0] !== '');
$otp->setIssuer($result[0]);
|
5️⃣ Mutation Testing:
src/Factory.php#L71
Escaped Mutant for Mutator "MethodCallRemoval":
@@ @@
$otp->setIssuerIncludedAsParameter(true);
}
assert($result[0] !== '');
- $otp->setIssuer($result[0]);
+
}
private static function createOTP(Url $parsed_url, ClockInterface $clock): OTPInterface
{
|
5️⃣ Mutation Testing:
src/HOTP.php#L39
Escaped Mutant for Mutator "MethodCallRemoval":
@@ @@
$htop = new self($secret);
$htop->setCounter(self::DEFAULT_COUNTER);
$htop->setDigest(self::DEFAULT_DIGEST);
- $htop->setDigits(self::DEFAULT_DIGITS);
+
return $htop;
}
public static function generate(): self
|
5️⃣ Mutation Testing:
src/HOTP.php#L55
Escaped Mutant for Mutator "LogicalAnd":
@@ @@
public function getCounter(): int
{
$value = $this->getParameter('counter');
- is_int($value) && $value >= 0 || throw new InvalidArgumentException('Invalid "counter" parameter.');
+ is_int($value) || $value >= 0 || throw new InvalidArgumentException('Invalid "counter" parameter.');
return $value;
}
public function getProvisioningUri(): string
|
5️⃣ Mutation Testing:
src/HOTP.php#L55
Escaped Mutant for Mutator "Throw_":
@@ @@
public function getCounter(): int
{
$value = $this->getParameter('counter');
- is_int($value) && $value >= 0 || throw new InvalidArgumentException('Invalid "counter" parameter.');
+ is_int($value) && $value >= 0 || new InvalidArgumentException('Invalid "counter" parameter.');
return $value;
}
public function getProvisioningUri(): string
|
5️⃣ Mutation Testing:
src/HOTP.php#L55
Escaped Mutant for Mutator "LogicalOrNegation":
@@ @@
public function getCounter(): int
{
$value = $this->getParameter('counter');
- is_int($value) && $value >= 0 || throw new InvalidArgumentException('Invalid "counter" parameter.');
+ !(is_int($value) && $value >= 0 || throw new InvalidArgumentException('Invalid "counter" parameter.'));
return $value;
}
public function getProvisioningUri(): string
|
5️⃣ Mutation Testing:
src/HOTP.php#L62
Escaped Mutant for Mutator "ArrayItemRemoval":
@@ @@
}
public function getProvisioningUri(): string
{
- return $this->generateURI('hotp', ['counter' => $this->getCounter()]);
+ return $this->generateURI('hotp', []);
}
/**
* If the counter is not provided, the OTP is verified at the actual counter.
|