diff --git a/tests/Unit/MetadataResolver/CreateMockedResolver.php b/tests/Unit/MetadataResolver/CreateMockedResolver.php new file mode 100644 index 0000000..70a7847 --- /dev/null +++ b/tests/Unit/MetadataResolver/CreateMockedResolver.php @@ -0,0 +1,53 @@ +shouldUseMock()) { + $this->resolver = app()->make($resolverClass); + + return $this->resolver; + } + + $headers += [ + 'content-type' => 'text/html', + ]; + + $mockResponse = new Response($status, $headers, $responseText); + $this->handler = new MockHandler([$mockResponse]); + $client = new Client(['handler' => $this->handler]); + $this->resolver = app()->make($resolverClass, ['client' => $client]); + return $this->resolver; + } + + protected function shouldUseMock(): bool + { + return (bool)env('TEST_USE_HTTP_MOCK', true); + } +} diff --git a/tests/Unit/MetadataResolver/NijieResolverTest.php b/tests/Unit/MetadataResolver/NijieResolverTest.php index 25f361f..adb9b81 100644 --- a/tests/Unit/MetadataResolver/NijieResolverTest.php +++ b/tests/Unit/MetadataResolver/NijieResolverTest.php @@ -7,95 +7,135 @@ use Tests\TestCase; class NijieResolverTest extends TestCase { + use CreateMockedResolver; + + public function setUp() + { + parent::setUp(); + } + public function testStandardPicture() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html'); - $metadata = $resolver->resolve('https://nijie.info/view.php?id=66384'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=66384'); $this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title); $this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description); $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); $this->assertNotRegExp('~/diff/main/~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=66384', (string)$this->handler->getLastRequest()->getUri()); + } } public function testMultiplePicture() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html'); - $metadata = $resolver->resolve('https://nijie.info/view.php?id=202707'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=202707'); $this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title); $this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description); $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); $this->assertNotRegExp('~/diff/main/~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=202707', (string)$this->handler->getLastRequest()->getUri()); + } } public function testAnimationGif() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html'); - $metadata = $resolver->resolve('https://nijie.info/view.php?id=9537'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537'); $this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title); $this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description); $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=9537', (string)$this->handler->getLastRequest()->getUri()); + } } public function testMp4Movie() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html'); - $metadata = $resolver->resolve('https://nijie.info/view.php?id=256283'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=256283'); $this->assertEquals('てすと | ニジエ運営', $metadata->title); $this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description); $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=256283', (string)$this->handler->getLastRequest()->getUri()); + } } public function testStandardPictureSp() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html'); - $metadata = $resolver->resolve('https://sp.nijie.info/view.php?id=66384'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=66384'); $this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title); $this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description); $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); $this->assertNotRegExp('~/diff/main/~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=66384', (string)$this->handler->getLastRequest()->getUri()); + } } public function testMultiplePictureSp() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html'); - $metadata = $resolver->resolve('https://sp.nijie.info/view.php?id=202707'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=202707'); $this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title); $this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description); $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); $this->assertNotRegExp('~/diff/main/~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=202707', (string)$this->handler->getLastRequest()->getUri()); + } } public function testAnimationGifSp() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html'); - $metadata = $resolver->resolve('https://nijie.info/view.php?id=9537'); + $this->createResolver(NijieResolver::class, $responseText); + + + $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537'); $this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title); $this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description); $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=9537', (string)$this->handler->getLastRequest()->getUri()); + } } public function testMp4MovieSp() { - sleep(1); - $resolver = new NijieResolver(); + $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html'); - $metadata = $resolver->resolve('https://sp.nijie.info/view.php?id=256283'); + $this->createResolver(NijieResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=256283'); $this->assertEquals('てすと | ニジエ運営', $metadata->title); $this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description); $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); + if ($this->shouldUseMock()) { + $this->assertSame('https://nijie.info/view.php?id=256283', (string)$this->handler->getLastRequest()->getUri()); + } } } diff --git a/tests/Unit/MetadataResolver/OGPResolverTest.php b/tests/Unit/MetadataResolver/OGPResolverTest.php index 1befcd0..d1c6e80 100644 --- a/tests/Unit/MetadataResolver/OGPResolverTest.php +++ b/tests/Unit/MetadataResolver/OGPResolverTest.php @@ -8,18 +8,45 @@ use Tests\TestCase; class OGPResolverTest extends TestCase { + use CreateMockedResolver; + public function testMissingUrl() { - $resolver = new OGPResolver(); + $this->createResolver(OGPResolver::class, '', [], 404); - $this->expectException(ClientException::class); - $resolver->resolve('http://example.com/404'); + $this->expectException(\RuntimeException::class); + $this->resolver->resolve('http://example.com/404'); } public function testResolve() { - $resolver = new OGPResolver(); + $response = <<< 'HTML' + + + + + The Open Graph protocol + + + + + + + + + + + + + + + + + +HTML; + $this->createResolver(OGPResolver::class, $response); + $resolver = $this->createResolver(OGPResolver::class, $response); $metadata = $resolver->resolve('http://ogp.me'); $this->assertEquals('Open Graph protocol', $metadata->title); $this->assertEquals('The Open Graph protocol enables any web page to become a rich object in a social graph.', $metadata->description); @@ -28,9 +55,22 @@ class OGPResolverTest extends TestCase public function testResolveTitleOnly() { - $resolver = new OGPResolver(); + $response = <<< 'HTML' + + + + Example Domain - $metadata = $resolver->resolve('http://example.com'); + + + + + + +HTML; + $this->createResolver(OGPResolver::class, $response); + + $metadata = $this->resolver->resolve('http://example.com'); $this->assertEquals('Example Domain', $metadata->title); $this->assertEmpty($metadata->description); $this->assertEmpty($metadata->image); @@ -38,7 +78,7 @@ class OGPResolverTest extends TestCase public function testResolveTitleAndDescription() { - $resolver = new OGPResolver(); + $resolver = $this->app->make(OGPResolver::class); $html = <<Welcome to my homepage diff --git a/tests/fixture/Nijie/testAnimationGifResponse.html b/tests/fixture/Nijie/testAnimationGifResponse.html new file mode 100644 index 0000000..696dbb0 --- /dev/null +++ b/tests/fixture/Nijie/testAnimationGifResponse.html @@ -0,0 +1,11 @@ +ニジエがgifに対応したんだってね 奥さん | 黒末アプコ | ニジエ + + + + + + + + + + diff --git a/tests/fixture/Nijie/testMp4MovieResponse.html b/tests/fixture/Nijie/testMp4MovieResponse.html new file mode 100644 index 0000000..7b65b97 --- /dev/null +++ b/tests/fixture/Nijie/testMp4MovieResponse.html @@ -0,0 +1,30 @@ +てすと | ニジエ運営 | ニジエ + + + + + + +

 

good job

名無しのチンポップ

2018-04-10

+ + + + diff --git a/tests/fixture/Nijie/testMultiplePictureResponse.html b/tests/fixture/Nijie/testMultiplePictureResponse.html new file mode 100644 index 0000000..6b6f54f --- /dev/null +++ b/tests/fixture/Nijie/testMultiplePictureResponse.html @@ -0,0 +1,12 @@ + + ニジエ壁紙 | ニジエ運営 | ニジエ + + + + + + diff --git a/tests/fixture/Nijie/testStandardPictureResponse.html b/tests/fixture/Nijie/testStandardPictureResponse.html new file mode 100644 index 0000000..d8bd8f2 --- /dev/null +++ b/tests/fixture/Nijie/testStandardPictureResponse.html @@ -0,0 +1,16 @@ +チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営 | ニジエ + + + + + + + + + + +