Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
22 / 22
StudentConventionProvider
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
8
100.00% covered (success)
100.00%
22 / 22
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 generateReference
100.00% covered (success)
100.00%
1 / 1
6
100.00% covered (success)
100.00%
17 / 17
 normalizeString
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
<?php
/*
 * This file is part of the Incipio package.
 *
 * (c) Théo FIDRY <theo.fidry@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace ApiBundle\DataFixtures\Faker\Provider;
use Faker\Generator;
/**
 * @see    ApiBundle\Entity\StudentConvention
 *
 * @author Théo FIDRY <theo.fidry@gmail.com>
 */
class StudentConventionProvider
{
    /**
     * @var Generator
     */
    private $faker;
    /**
     * @param Generator $faker
     */
    public function __construct(Generator $faker)
    {
        $this->faker = $faker;
    }
    /**
     * Generates a student convention reference from the student full name and the date of signature of the convention.
     *
     * @param \DateTime   $dateOfSignature
     * @param string|null $fullname        If is null, a random name is used instead
     *
     * @return string
     */
    public function generateReference(\DateTime $dateOfSignature, $fullname = null)
    {
        if (null === $fullname || '' === $fullname) {
            // It does not matter if the Faker instance is not based on the application locale as we don't really
            // care of the real value of the name. Keeping this avoid having to inject a faker instance which is
            // more difficul to properly test.
            $fullname = $this->faker->name();
        }
        $fullnameParts = array_merge(explode(' ', $this->normalizeString($fullname)), ['a', 'b', 'c', 'd', 'e', 'f']);
        $reference = '';
        foreach ($fullnameParts as $part) {
            $referenceLength = strlen($reference);
            if (6 === $referenceLength) {
                break;
            }
            $remaining = 6 - $referenceLength;
            if (3 < $remaining) {
                $remaining = 3;
            }
            $reference .= substr($part, 0, $remaining);
        }
        $reference .= $dateOfSignature->format('Ymd');
        return strtoupper($reference);
    }
    /**
     * Removes any non letter characters from the string except for whitespaces.
     *
     * @param string $string
     *
     * @return string
     */
    private function normalizeString($string)
    {
        $string = str_replace(' ', '______', $string);      // Secure spaces
        $string = preg_replace('/[^A-Za-z\_]/', '', $string); // Removes special characters
        return str_replace('______', ' ', $string);
    }
}