History

Simplify file scraper setup; scrape files in the "docs/[slug]" directory

Thibaut Courouble committed 7 years ago

Commit bf003661 parent 91753ce22 files · +124 −104Browse files

Showing the changes to test (1 of 22 files). Show all

Unified · Split

test/lib/docs/core/scrapers/file_scraper_test.rb+89−47
@@ -2,16 +2,23 @@ require 'test_helper' · 1 unmodified line
2require 'docs'2require 'docs'
3 3
4class FileScraperTest < MiniTest::Spec4class FileScraperTest < MiniTest::Spec
5 ROOT_PATH = File.expand_path('../../../../../../', __FILE__)
6
5 class Scraper < Docs::FileScraper7 class Scraper < Docs::FileScraper
6 self.dir = '/'
7 self.html_filters = Docs::FilterStack.new8 self.html_filters = Docs::FilterStack.new
8 self.text_filters = Docs::FilterStack.new9 self.text_filters = Docs::FilterStack.new
10
11 version 'version' do; end
9 end12 end
10 13
11 let :scraper do14 let :scraper do
12 Scraper.new15 Scraper.new
13 end16 end
14 17
18 let :versioned_scraper do
19 Scraper.versions.first.new
20 end
21
15 let :response do22 let :response do
16 OpenStruct.new body: 'body', url: Docs::URL.parse(Scraper.base_url)23 OpenStruct.new body: 'body', url: Docs::URL.parse(Scraper.base_url)
17 end24 end
@@ -22,9 +29,16 @@ class FileScraperTest < MiniTest::Spec · 4 unmodified lines
22 end29 end
23 end30 end
24 31
32 describe "#source_directory" do
33 it "returns the directory at docs/[slug]" do
34 assert_equal File.join(ROOT_PATH, 'docs', 'scraper'), scraper.source_directory
35 assert_equal File.join(ROOT_PATH, 'docs', 'scraper~version'), versioned_scraper.source_directory
36 end
37 end
38
25 describe "#request_one" do39 describe "#request_one" do
26 let :path do40 let :path do
27 File.join(Scraper.dir, 'path')41 'path'
28 end42 end
29 43
30 let :result do44 let :result do
@@ -35,20 +49,34 @@ class FileScraperTest < MiniTest::Spec · 4 unmodified lines
35 stub(scraper).read_file49 stub(scraper).read_file
36 end50 end
37 51
38 it "reads a file" do52 context "when the source directory doesn't exist" do
39 mock(scraper).read_file(path)53 it "raises an error" do
40 result54 assert_raises Docs::SetupError do
55 result
56 end
57 end
41 end58 end
42 59
43 describe "the returned response object" do60 context "when the source directory exists" do
44 it "has a #body" do61 before do
45 stub(scraper).read_file { 'body' }62 stub(scraper).assert_source_directory_exists
46 assert_equal 'body', result.body63 end
64
65 it "reads a file" do
66 mock(scraper).read_file(path)
67 result
47 end68 end
48 69
49 it "has a #url" do70 describe "the returned response object" do
50 assert_equal path, result.url.to_s71 it "has a #body" do
51 assert_instance_of Docs::URL, result.url72 stub(scraper).read_file { 'body' }
73 assert_equal 'body', result.body
74 end
75
76 it "has a #url" do
77 assert_equal path, result.url.to_s
78 assert_instance_of Docs::URL, result.url
79 end
52 end80 end
53 end81 end
54 end82 end
@@ -58,49 +86,63 @@ class FileScraperTest < MiniTest::Spec · 3 unmodified lines
58 %w(one two)86 %w(one two)
59 end87 end
60 88
61 it "requests the given url" do89 context "when the source directory doesn't exist" do
62 mock(scraper).request_one('url')90 it "raises an error" do
63 scraper.send(:request_all, 'url') {}91 assert_raises Docs::SetupError do
64 end92 scraper.send(:request_all, urls) {}
65 93 end
66 it "requests the given urls" do94 end
67 requests = []
68 stub(scraper).request_one { |url| requests << url; nil }
69 scraper.send(:request_all, urls) {}
70 assert_equal urls, requests
71 end
72
73 it "yields the responses" do
74 responses = []
75 stub(scraper).request_one { |url| urls.index(url) }
76 scraper.send(:request_all, urls) { |response| responses << response; nil }
77 assert_equal (0...urls.length).to_a, responses
78 end95 end
79 96
80 context "when the block returns an array" do97 context "when the source directory exists" do
81 let :next_urls do98 before do
82 %w(three four)99 stub(scraper).assert_source_directory_exists
83 end100 end
84 101
85 let :all_urls do102 it "requests the given url" do
86 urls + %w(three four)103 mock(scraper).request_one('url')
104 scraper.send(:request_all, 'url') {}
87 end105 end
88 106
89 it "requests the returned urls" do107 it "requests the given urls" do
90 requests = []108 requests = []
91 stub(scraper).request_one { |url| requests << url; url }109 stub(scraper).request_one { |url| requests << url; nil }
92 scraper.send(:request_all, urls) { [next_urls.shift].compact }110 scraper.send(:request_all, urls) {}
93 assert_equal all_urls, requests111 assert_equal urls, requests
94 end112 end
95 113
96 it "yields their responses" do114 it "yields the responses" do
97 responses = []115 responses = []
98 stub(scraper).request_one { |url| all_urls.index(url) }116 stub(scraper).request_one { |url| urls.index(url) }
99 scraper.send :request_all, urls do |response|117 scraper.send(:request_all, urls) { |response| responses << response; nil }
100 responses << response118 assert_equal (0...urls.length).to_a, responses
101 [next_urls.shift].compact119 end
120
121 context "when the block returns an array" do
122 let :next_urls do
123 %w(three four)
124 end
125
126 let :all_urls do
127 urls + %w(three four)
128 end
129
130 it "requests the returned urls" do
131 requests = []
132 stub(scraper).request_one { |url| requests << url; url }
133 scraper.send(:request_all, urls) { [next_urls.shift].compact }
134 assert_equal all_urls, requests
135 end
136
137 it "yields their responses" do
138 responses = []
139 stub(scraper).request_one { |url| all_urls.index(url) }
140 scraper.send :request_all, urls do |response|
141 responses << response
142 [next_urls.shift].compact
143 end
144 assert_equal (0...all_urls.length).to_a, responses
102 end145 end
103 assert_equal (0...all_urls.length).to_a, responses
104 end146 end
105 end147 end
106 end148 end
@@ -126,13 +168,13 @@ class FileScraperTest < MiniTest::Spec · 19 unmodified lines
126 scraper.send :read_file, 'file'168 scraper.send :read_file, 'file'
127 end169 end
128 170
129 it "returns the file's content when the file exists" do171 it "returns the file's content when the file exists in the source directory" do
130 stub(File).read('file') { 'content' }172 stub(File).read(File.join(ROOT_PATH, 'docs', 'scraper', 'file')) { 'content' }
131 assert_equal 'content', result173 assert_equal 'content', result
132 end174 end
133 175
134 it "returns nil when the file doesn't exist" do176 it "returns nil when the file doesn't exist" do
135 stub(File).read('file') { raise }177 stub(File).read(File.join(ROOT_PATH, 'docs', 'scraper', 'file')) { raise }
136 assert_nil result178 assert_nil result
137 end179 end
138 end180 end