Showing the changes to test (1 of 22 files). Show all
Unified · Split
| @@ -2,16 +2,23 @@ require 'test_helper' · 1 unmodified line | ||
| 2 | 2 | require 'docs' |
| 3 | 3 | |
| 4 | 4 | class FileScraperTest < MiniTest::Spec |
| 5 | + ROOT_PATH = File.expand_path('../../../../../../', __FILE__) | |
| 6 | + | |
| 5 | 7 | class Scraper < Docs::FileScraper |
| 6 | − self.dir = '/' | |
| 7 | 8 | self.html_filters = Docs::FilterStack.new |
| 8 | 9 | self.text_filters = Docs::FilterStack.new |
| 10 | + | |
| 11 | + version 'version' do; end | |
| 9 | 12 | end |
| 10 | 13 | |
| 11 | 14 | let :scraper do |
| 12 | 15 | Scraper.new |
| 13 | 16 | end |
| 14 | 17 | |
| 18 | + let :versioned_scraper do | |
| 19 | + Scraper.versions.first.new | |
| 20 | + end | |
| 21 | + | |
| 15 | 22 | let :response do |
| 16 | 23 | OpenStruct.new body: 'body', url: Docs::URL.parse(Scraper.base_url) |
| 17 | 24 | end |
| @@ -22,9 +29,16 @@ class FileScraperTest < MiniTest::Spec · 4 unmodified lines | ||
| 22 | 29 | end |
| 23 | 30 | 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 | 39 | describe "#request_one" do |
| 26 | 40 | let :path do |
| 27 | − File.join(Scraper.dir, 'path') | |
| 41 | + 'path' | |
| 28 | 42 | end |
| 29 | 43 | |
| 30 | 44 | let :result do |
| @@ -35,20 +49,34 @@ class FileScraperTest < MiniTest::Spec · 4 unmodified lines | ||
| 35 | 49 | stub(scraper).read_file |
| 36 | 50 | end |
| 37 | 51 | |
| 38 | − it "reads a file" do | |
| 39 | − mock(scraper).read_file(path) | |
| 40 | − result | |
| 52 | + context "when the source directory doesn't exist" do | |
| 53 | + it "raises an error" do | |
| 54 | + assert_raises Docs::SetupError do | |
| 55 | + result | |
| 56 | + end | |
| 57 | + end | |
| 41 | 58 | end |
| 42 | 59 | |
| 43 | − describe "the returned response object" do | |
| 44 | − it "has a #body" do | |
| 45 | − stub(scraper).read_file { 'body' } | |
| 46 | − assert_equal 'body', result.body | |
| 60 | + context "when the source directory exists" do | |
| 61 | + before do | |
| 62 | + stub(scraper).assert_source_directory_exists | |
| 63 | + end | |
| 64 | + | |
| 65 | + it "reads a file" do | |
| 66 | + mock(scraper).read_file(path) | |
| 67 | + result | |
| 47 | 68 | end |
| 48 | 69 | |
| 49 | − it "has a #url" do | |
| 50 | − assert_equal path, result.url.to_s | |
| 51 | − assert_instance_of Docs::URL, result.url | |
| 70 | + describe "the returned response object" do | |
| 71 | + it "has a #body" do | |
| 72 | + 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 | 80 | end |
| 53 | 81 | end |
| 54 | 82 | end |
| @@ -58,49 +86,63 @@ class FileScraperTest < MiniTest::Spec · 3 unmodified lines | ||
| 58 | 86 | %w(one two) |
| 59 | 87 | end |
| 60 | 88 | |
| 61 | − it "requests the given url" do | |
| 62 | − mock(scraper).request_one('url') | |
| 63 | − scraper.send(:request_all, 'url') {} | |
| 64 | − end | |
| 65 | − | |
| 66 | − it "requests the given urls" do | |
| 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 | |
| 89 | + context "when the source directory doesn't exist" do | |
| 90 | + it "raises an error" do | |
| 91 | + assert_raises Docs::SetupError do | |
| 92 | + scraper.send(:request_all, urls) {} | |
| 93 | + end | |
| 94 | + end | |
| 78 | 95 | end |
| 79 | 96 | |
| 80 | − context "when the block returns an array" do | |
| 81 | − let :next_urls do | |
| 82 | − %w(three four) | |
| 97 | + context "when the source directory exists" do | |
| 98 | + before do | |
| 99 | + stub(scraper).assert_source_directory_exists | |
| 83 | 100 | end |
| 84 | 101 | |
| 85 | − let :all_urls do | |
| 86 | − urls + %w(three four) | |
| 102 | + it "requests the given url" do | |
| 103 | + mock(scraper).request_one('url') | |
| 104 | + scraper.send(:request_all, 'url') {} | |
| 87 | 105 | end |
| 88 | 106 | |
| 89 | − it "requests the returned urls" do | |
| 107 | + it "requests the given urls" do | |
| 90 | 108 | requests = [] |
| 91 | − stub(scraper).request_one { |url| requests << url; url } | |
| 92 | − scraper.send(:request_all, urls) { [next_urls.shift].compact } | |
| 93 | − assert_equal all_urls, requests | |
| 109 | + stub(scraper).request_one { |url| requests << url; nil } | |
| 110 | + scraper.send(:request_all, urls) {} | |
| 111 | + assert_equal urls, requests | |
| 94 | 112 | end |
| 95 | 113 | |
| 96 | − it "yields their responses" do | |
| 114 | + it "yields the responses" do | |
| 97 | 115 | responses = [] |
| 98 | − stub(scraper).request_one { |url| all_urls.index(url) } | |
| 99 | − scraper.send :request_all, urls do |response| | |
| 100 | − responses << response | |
| 101 | − [next_urls.shift].compact | |
| 116 | + stub(scraper).request_one { |url| urls.index(url) } | |
| 117 | + scraper.send(:request_all, urls) { |response| responses << response; nil } | |
| 118 | + assert_equal (0...urls.length).to_a, responses | |
| 119 | + 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 | 145 | end |
| 103 | − assert_equal (0...all_urls.length).to_a, responses | |
| 104 | 146 | end |
| 105 | 147 | end |
| 106 | 148 | end |
| @@ -126,13 +168,13 @@ class FileScraperTest < MiniTest::Spec · 19 unmodified lines | ||
| 126 | 168 | scraper.send :read_file, 'file' |
| 127 | 169 | end |
| 128 | 170 | |
| 129 | − it "returns the file's content when the file exists" do | |
| 130 | − stub(File).read('file') { 'content' } | |
| 171 | + it "returns the file's content when the file exists in the source directory" do | |
| 172 | + stub(File).read(File.join(ROOT_PATH, 'docs', 'scraper', 'file')) { 'content' } | |
| 131 | 173 | assert_equal 'content', result |
| 132 | 174 | end |
| 133 | 175 | |
| 134 | 176 | 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 | 178 | assert_nil result |
| 137 | 179 | end |
| 138 | 180 | end |