Fixed merge conflicts

This commit is contained in:
Alejandro Celaya 2017-10-23 13:28:09 +02:00
commit 781ca39938
8 changed files with 48 additions and 7 deletions

View file

@ -12,6 +12,7 @@ return [
'hostname' => env('SHORTENED_URL_HOSTNAME'), 'hostname' => env('SHORTENED_URL_HOSTNAME'),
], ],
'shortcode_chars' => env('SHORTCODE_CHARS', UrlShortener::DEFAULT_CHARS), 'shortcode_chars' => env('SHORTCODE_CHARS', UrlShortener::DEFAULT_CHARS),
'validate_url' => true,
], ],
]; ];

View file

@ -45,6 +45,13 @@ class UrlShortenerConfigCustomizerPlugin extends AbstractConfigCustomizerPlugin
null, null,
true true
) ?: str_shuffle(UrlShortener::DEFAULT_CHARS), ) ?: str_shuffle(UrlShortener::DEFAULT_CHARS),
'VALIDATE_URL' => $this->questionHelper->ask(
$input,
$output,
new ConfirmationQuestion(
'<question>Do you want to validate long urls by 200 HTTP status code on response (Y/n):</question>'
)
),
]); ]);
} }
} }

View file

@ -191,6 +191,7 @@ final class CustomizableAppConfig implements ArraySerializableInterface
'SCHEMA' => $urlShortener['domain']['schema'], 'SCHEMA' => $urlShortener['domain']['schema'],
'HOSTNAME' => $urlShortener['domain']['hostname'], 'HOSTNAME' => $urlShortener['domain']['hostname'],
'CHARS' => $urlShortener['shortcode_chars'], 'CHARS' => $urlShortener['shortcode_chars'],
'VALIDATE_URL' => $urlShortener['validate_url'],
]); ]);
} }
} }
@ -242,6 +243,7 @@ final class CustomizableAppConfig implements ArraySerializableInterface
'hostname' => $this->urlShortener['HOSTNAME'], 'hostname' => $this->urlShortener['HOSTNAME'],
], ],
'shortcode_chars' => $this->urlShortener['CHARS'], 'shortcode_chars' => $this->urlShortener['CHARS'],
'validate_url' => $this->urlShortener['VALIDATE_URL'],
], ],
]; ];

View file

@ -47,8 +47,9 @@ class UrlShortenerConfigCustomizerPluginTest extends TestCase
'SCHEMA' => 'something', 'SCHEMA' => 'something',
'HOSTNAME' => 'something', 'HOSTNAME' => 'something',
'CHARS' => 'something', 'CHARS' => 'something',
'VALIDATE_URL' => 'something',
], $config->getUrlShortener()); ], $config->getUrlShortener());
$askSecret->shouldHaveBeenCalledTimes(3); $askSecret->shouldHaveBeenCalledTimes(4);
} }
/** /**
@ -66,6 +67,7 @@ class UrlShortenerConfigCustomizerPluginTest extends TestCase
'SCHEMA' => 'bar', 'SCHEMA' => 'bar',
'HOSTNAME' => 'bar', 'HOSTNAME' => 'bar',
'CHARS' => 'bar', 'CHARS' => 'bar',
'VALIDATE_URL' => 'bar',
]); ]);
$this->plugin->process(new ArrayInput([]), new NullOutput(), $config); $this->plugin->process(new ArrayInput([]), new NullOutput(), $config);
@ -74,8 +76,9 @@ class UrlShortenerConfigCustomizerPluginTest extends TestCase
'SCHEMA' => 'foo', 'SCHEMA' => 'foo',
'HOSTNAME' => 'foo', 'HOSTNAME' => 'foo',
'CHARS' => 'foo', 'CHARS' => 'foo',
'VALIDATE_URL' => false,
], $config->getUrlShortener()); ], $config->getUrlShortener());
$ask->shouldHaveBeenCalledTimes(4); $ask->shouldHaveBeenCalledTimes(5);
} }
/** /**
@ -91,6 +94,7 @@ class UrlShortenerConfigCustomizerPluginTest extends TestCase
'SCHEMA' => 'foo', 'SCHEMA' => 'foo',
'HOSTNAME' => 'foo', 'HOSTNAME' => 'foo',
'CHARS' => 'foo', 'CHARS' => 'foo',
'VALIDATE_URL' => 'foo',
]); ]);
$this->plugin->process(new ArrayInput([]), new NullOutput(), $config); $this->plugin->process(new ArrayInput([]), new NullOutput(), $config);
@ -99,6 +103,7 @@ class UrlShortenerConfigCustomizerPluginTest extends TestCase
'SCHEMA' => 'foo', 'SCHEMA' => 'foo',
'HOSTNAME' => 'foo', 'HOSTNAME' => 'foo',
'CHARS' => 'foo', 'CHARS' => 'foo',
'VALIDATE_URL' => 'foo',
], $config->getUrlShortener()); ], $config->getUrlShortener());
$ask->shouldHaveBeenCalledTimes(1); $ask->shouldHaveBeenCalledTimes(1);
} }

View file

@ -75,7 +75,7 @@ class CacheFactoryTest extends TestCase
*/ */
public function filesystemCacheAdaptersReadDirOption() public function filesystemCacheAdaptersReadDirOption()
{ {
$dir = sys_get_temp_dir(); $dir = realpath(sys_get_temp_dir());
/** @var FilesystemCache $instance */ /** @var FilesystemCache $instance */
$instance = $this->factory->__invoke($this->createSM(FilesystemCache::class, ['dir' => $dir]), ''); $instance = $this->factory->__invoke($this->createSM(FilesystemCache::class, ['dir' => $dir]), '');
$this->assertInstanceOf(FilesystemCache::class, $instance); $this->assertInstanceOf(FilesystemCache::class, $instance);

View file

@ -42,7 +42,13 @@ return [
NotFoundDelegate::class => [TemplateRendererInterface::class], NotFoundDelegate::class => [TemplateRendererInterface::class],
// Services // Services
Service\UrlShortener::class => ['httpClient', 'em', Cache::class, 'config.url_shortener.shortcode_chars'], Service\UrlShortener::class => [
'httpClient',
'em',
Cache::class,
'config.url_shortener.validate_url',
'config.url_shortener.shortcode_chars',
],
Service\VisitsTracker::class => ['em'], Service\VisitsTracker::class => ['em'],
Service\ShortUrlService::class => ['em'], Service\ShortUrlService::class => ['em'],
Service\VisitService::class => ['em'], Service\VisitService::class => ['em'],

View file

@ -46,18 +46,24 @@ class UrlShortener implements UrlShortenerInterface
* @var SlugifyInterface * @var SlugifyInterface
*/ */
private $slugger; private $slugger;
/**
* @var bool
*/
private $urlValidationEnabled;
public function __construct( public function __construct(
ClientInterface $httpClient, ClientInterface $httpClient,
EntityManagerInterface $em, EntityManagerInterface $em,
Cache $cache, Cache $cache,
$urlValidationEnabled,
$chars = self::DEFAULT_CHARS, $chars = self::DEFAULT_CHARS,
SlugifyInterface $slugger = null SlugifyInterface $slugger = null
) { ) {
$this->httpClient = $httpClient; $this->httpClient = $httpClient;
$this->em = $em; $this->em = $em;
$this->chars = empty($chars) ? self::DEFAULT_CHARS : $chars;
$this->cache = $cache; $this->cache = $cache;
$this->urlValidationEnabled = $urlValidationEnabled;
$this->chars = empty($chars) ? self::DEFAULT_CHARS : $chars;
$this->slugger = $slugger ?: new Slugify(); $this->slugger = $slugger ?: new Slugify();
} }
@ -91,8 +97,11 @@ class UrlShortener implements UrlShortenerInterface
return $shortUrl->getShortCode(); return $shortUrl->getShortCode();
} }
// Check that the URL exists // Check if the validation of url is enabled in the config
$this->checkUrlExists($url); if (true === $this->urlValidationEnabled) {
// Check that the URL exists
$this->checkUrlExists($url);
}
$customSlug = $this->processCustomSlug($customSlug); $customSlug = $this->processCustomSlug($customSlug);
// Transactionally insert the short url, then generate the short code and finally update the short code // Transactionally insert the short url, then generate the short code and finally update the short code

View file

@ -69,10 +69,19 @@ class UrlShortenerTest extends TestCase
$this->cache = new ArrayCache(); $this->cache = new ArrayCache();
$this->slugger = $this->prophesize(SlugifyInterface::class); $this->slugger = $this->prophesize(SlugifyInterface::class);
$this->setUrlShortener(false);
}
/**
* @param bool $urlValidationEnabled
*/
public function setUrlShortener($urlValidationEnabled)
{
$this->urlShortener = new UrlShortener( $this->urlShortener = new UrlShortener(
$this->httpClient->reveal(), $this->httpClient->reveal(),
$this->em->reveal(), $this->em->reveal(),
$this->cache, $this->cache,
$urlValidationEnabled,
UrlShortener::DEFAULT_CHARS, UrlShortener::DEFAULT_CHARS,
$this->slugger->reveal() $this->slugger->reveal()
); );
@ -110,6 +119,8 @@ class UrlShortenerTest extends TestCase
*/ */
public function exceptionIsThrownWhenUrlDoesNotExist() public function exceptionIsThrownWhenUrlDoesNotExist()
{ {
$this->setUrlShortener(true);
$this->httpClient->request(Argument::cetera())->willThrow( $this->httpClient->request(Argument::cetera())->willThrow(
new ClientException('', $this->prophesize(Request::class)->reveal()) new ClientException('', $this->prophesize(Request::class)->reveal())
); );