This repository has been archived by the owner. It is now read-only.
File tree 4 files changed +111
-7
lines changed
tests/Unit/Scraper/Listeners
4 files changed +111
-7
lines changed Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Softonic \LaravelIntelligentScraper \Scraper \Listeners ;
4
+
5
+ use Softonic \LaravelIntelligentScraper \Scraper \Events \ScrapeFailed ;
6
+
7
+ class ScrapeFailedListener
8
+ {
9
+ private $ listeners ;
10
+
11
+ public function __construct ($ listeners )
12
+ {
13
+ $ this ->listeners = $ listeners ;
14
+ }
15
+
16
+ public function handle (ScrapeFailed $ scraped )
17
+ {
18
+ if (isset ($ this ->listeners [$ scraped ->scrapeRequest ->type ])) {
19
+ resolve ($ this ->listeners [$ scraped ->scrapeRequest ->type ])->handle ($ scraped );
20
+ }
21
+ }
22
+ }
Original file line number Diff line number Diff line change 11
11
use Softonic \LaravelIntelligentScraper \Scraper \Listeners \ConfigureScraper ;
12
12
use Softonic \LaravelIntelligentScraper \Scraper \Listeners \Scrape ;
13
13
use Softonic \LaravelIntelligentScraper \Scraper \Listeners \ScrapedListener ;
14
+ use Softonic \LaravelIntelligentScraper \Scraper \Listeners \ScrapeFailedListener ;
14
15
use Softonic \LaravelIntelligentScraper \Scraper \Listeners \UpdateDataset ;
15
16
16
17
class ScraperProvider extends EventServiceProvider
@@ -75,7 +76,13 @@ public function register()
75
76
$ this ->app ->when (ScrapedListener::class)
76
77
->needs ('$listeners ' )
77
78
->give (function () {
78
- return config ('scraper.listeners ' );
79
+ return config ('scraper.listeners.scraped ' );
80
+ });
81
+
82
+ $ this ->app ->when (ScrapeFailedListener::class)
83
+ ->needs ('$listeners ' )
84
+ ->give (function () {
85
+ return config ('scraper.listeners.scrape-failed ' );
79
86
});
80
87
}
81
88
}
Original file line number Diff line number Diff line change 14
14
'ignore-identifiers ' => '/^react_.*$/ ' ,
15
15
],
16
16
/*
17
- * Configure listener per Scraped type
17
+ * Configure listener per event type
18
18
*
19
19
* Format:
20
20
* [
21
21
* 'type' => 'handler class',
22
22
* ].
23
23
*
24
+ * Declare in the "scraped" key the listener you want to attend the scrapes done successfully.
25
+ * Declare in the "scrape-failed" key the listener you want to attend the scrapes that could not retrieve the
26
+ * information.
27
+ *
24
28
* Example:
25
- * [
26
- * 'news' => App\NewsHandler::class,
27
- * 'post' => App\PostHandler::class
28
- * ]
29
+ * 'scraped' => [
30
+ * 'post' => App\CreatePostHandler::class
31
+ * ],
32
+ * 'scrape-failed' => [
33
+ * 'post' => App\NotifyErrorHandler::class
34
+ * ]
29
35
*/
30
36
'listeners ' => [
31
- //
37
+ 'scraped ' => [
38
+ //
39
+ ],
40
+ 'scrape-failed ' => [
41
+ //
42
+ ],
32
43
],
33
44
];
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Softonic \LaravelIntelligentScraper \Scraper \Listeners ;
4
+
5
+ use Softonic \LaravelIntelligentScraper \Scraper \Events \ScrapeFailed ;
6
+ use Softonic \LaravelIntelligentScraper \Scraper \Events \ScrapeRequest ;
7
+ use Tests \TestCase ;
8
+
9
+ class ScrapeFailedListenerTest extends TestCase
10
+ {
11
+ /**
12
+ * @test
13
+ */
14
+ public function whenReceiveAnUnknownScrapeFailedTypeItShouldDoNothing ()
15
+ {
16
+ $ listener = \Mockery::mock (ScrapeFailedListener::class);
17
+ \App::instance (get_class ($ listener ), $ listener );
18
+
19
+ $ scrapeFailedListener = new ScrapeFailedListener ([
20
+ 'known_type ' => get_class ($ listener ),
21
+ ]);
22
+
23
+ $ scrapeFailedEvent = new ScrapeFailed (
24
+ new ScrapeRequest (
25
+ 'http://uri ' ,
26
+ 'unknown_type '
27
+ ),
28
+ [],
29
+ 1
30
+ );
31
+
32
+ $ listener ->shouldNotReceive ('handle ' );
33
+
34
+ $ scrapeFailedListener ->handle ($ scrapeFailedEvent );
35
+ }
36
+
37
+ /**
38
+ * @test
39
+ */
40
+ public function whenReceiveAKnownScrapeFailedTypeItShouldHandleTheEventWithTheSpecificDependency ()
41
+ {
42
+ $ listener = \Mockery::mock (ScrapeFailedListener::class);
43
+ \App::instance (get_class ($ listener ), $ listener );
44
+
45
+ $ scrapeFailedListener = new ScrapeFailedListener ([
46
+ 'known_type ' => get_class ($ listener ),
47
+ ]);
48
+
49
+ $ scrapeFailedEvent = new ScrapeFailed (
50
+ new ScrapeRequest (
51
+ 'http://uri ' ,
52
+ 'known_type '
53
+ ),
54
+ [],
55
+ 1
56
+ );
57
+
58
+ $ listener ->shouldReceive ('handle ' )
59
+ ->once ()
60
+ ->with ($ scrapeFailedEvent );
61
+
62
+ $ scrapeFailedListener ->handle ($ scrapeFailedEvent );
63
+ }
64
+ }
You can’t perform that action at this time.
0 commit comments