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