spec/lib/middleman-cdn/cdns/cloudflare_spec.rb in middleman-cdn-0.3.0 vs spec/lib/middleman-cdn/cdns/cloudflare_spec.rb in middleman-cdn-0.3.1
- old
+ new
@@ -1,34 +1,28 @@
require 'spec_helper'
require 'lib/middleman-cdn/cdns/base_protocol'
shared_examples "invalidating the entire zone" do
- before do
- allow(double_cloudflare).to receive(:fpurge_ts)
- end
-
it "should invalidate the entire zone" do
- expect(double_cloudflare).to receive(:fpurge_ts).once.with("example.com")
+ expect(double_zone).to receive(:purge_cache).once.with(no_args)
subject.invalidate(options, files, all: all)
end
it "should not invalidate individual files" do
- expect(double_cloudflare).to_not receive(:zone_file_purge)
+ expect(double_zone).to_not receive(:purge_cache).with(files: file_urls)
subject.invalidate(options, files, all: all)
end
end
shared_examples "invalidating individual files" do
it "should not invalidate the entire zone" do
- expect(double_cloudflare).to_not receive(:fpurge_ts)
+ expect(double_zone).to_not receive(:purge_cache).with(no_args)
subject.invalidate(options, files, all: all)
end
it "should invalidate individual files" do
- files.each do |file|
- expect(double_cloudflare).to receive(:zone_file_purge).once.ordered.with("example.com", "http://example.com#{file}")
- end
+ expect(double_zone).to receive(:purge_cache).once.ordered.with(files: file_urls)
subject.invalidate(options, files, all: all)
end
end
describe Middleman::Cli::CloudFlareCDN do
@@ -45,19 +39,65 @@
required_keys = [:client_api_key, :email, :zone, :base_urls, :invalidate_zone_for_many_files]
expect(described_class.example_configuration_elements.keys).to eq(required_keys)
end
end
+ describe "Cloudflare API" do
+ let(:options) do
+ {
+ key: '000000000000000000000',
+ email: 'test@example.com'
+ }
+ end
+
+ let(:cloudflare_module) { ::Cloudflare }
+ let(:cloudflare) { cloudflare_module.connect(options) }
+
+ it "should have #connect method" do
+ expect(cloudflare_module).to respond_to(:connect).with_keywords(:key, :email)
+ end
+
+ context 'zones' do
+ it "should have #zones method" do
+ expect(cloudflare).to respond_to(:zones)
+ end
+
+ it "should have #zones.find_by_name method" do
+ expect(cloudflare.zones).to respond_to(:find_by_name).with(1).argument
+ end
+ end
+
+ context 'zone' do
+ before(:each) do
+ allow(cloudflare_response).to receive(:result) { double }
+ allow_any_instance_of(zone_class).to receive(:get) { cloudflare_response }
+ end
+
+ let(:zone_class) { ::Cloudflare::Zone }
+ let(:zone) { zone_class.new('http://example.com') }
+ let(:cloudflare_response) { double }
+
+ it "should have #purge_cache method" do
+ expect(zone).to respond_to(:purge_cache)
+ end
+ end
+ end
+
describe '#invalidate' do
let(:double_cloudflare) { double("::Cloudflare") }
+ let(:double_zone) { double("::Cloudflare::Zone") }
before do
- allow(double_cloudflare).to receive(:zone_file_purge)
- allow(::Cloudflare).to receive(:connection).and_return(double_cloudflare)
+ allow(double_zone).to receive(:purge_cache)
+ allow(::Cloudflare).to receive(:connect).and_return(double_cloudflare)
+ allow(double_cloudflare).to receive_message_chain('zones.find_by_name').and_return(double_zone)
end
let(:files) { (1..50).map { |i| "/test/file_#{i}.txt" } }
+ let(:http_file_urls) { files.map { |file| "http://example.com#{file}" } }
+ let(:https_file_urls) { files.map { |file| "https://example.com#{file}" } }
+ let(:file_urls) { http_file_urls.concat(https_file_urls) }
let(:all) { false }
context "all options provided" do
let(:options) do
{
@@ -67,11 +107,11 @@
base_urls: ['http://example.com', 'https://example.com']
}
end
it "should connect to cloudflare with credentails" do
- expect(::Cloudflare).to receive(:connection).with("000000000000000000000", "test@example.com")
+ expect(::Cloudflare).to receive(:connect).with(key: "000000000000000000000", email: "test@example.com")
subject.invalidate(options, files)
end
it "should not raise errors" do
subject.invalidate(options, files)
@@ -97,13 +137,11 @@
end
it_behaves_like "invalidating individual files"
it "should call cloudflare to purge each file for each base url" do
- files.each do |file|
- expect(double_cloudflare).to receive(:zone_file_purge).once.ordered.with("example.com", "http://example.com#{file}")
- end
+ expect(double_zone).to receive(:purge_cache).once.with(files: file_urls)
subject.invalidate(options, files)
end
end
context "more than 50 files to invalidate" do
@@ -140,11 +178,11 @@
it_behaves_like "invalidating the entire zone"
end
context "and errors occurs when purging" do
before do
- allow(double_cloudflare).to receive(:zone_file_purge).and_raise(StandardError)
+ allow(double_zone).to receive(:purge_cache).and_raise(StandardError)
end
it "should output saying error information" do
expect { subject.invalidate(options, files) }.to output(/error: StandardError/).to_stdout
end
@@ -164,10 +202,10 @@
base_urls: ['http://example.com', 'https://example.com']
}
end
it "should connect to cloudflare with environment variable credentails" do
- expect(::Cloudflare).to receive(:connection).with("111111111111111111111", "test-env@example.com")
+ expect(::Cloudflare).to receive(:connect).with(key: "111111111111111111111", email: "test-env@example.com")
subject.invalidate(options, files)
end
it "should not raise errors" do
subject.invalidate(options, files)