spec/spec_helper.rb in cloudflare-3.1.0 vs spec/spec_helper.rb in cloudflare-3.2.0

- old
+ new

@@ -1,30 +1,177 @@ +# frozen_string_literal: true if ENV['COVERAGE'] || ENV['TRAVIS'] - begin - require 'simplecov' - - SimpleCov.start do - add_filter "/spec/" - end - - if ENV['TRAVIS'] - require 'coveralls' - Coveralls.wear! - end - rescue LoadError - warn "Could not load simplecov: #{$!}" - end + begin + require 'simplecov' + + SimpleCov.start do + add_filter '/spec/' + end + rescue LoadError + warn "Could not load simplecov: #{$ERROR_INFO}" + end end -require "bundler/setup" -require "cloudflare" -require "cloudflare/rspec/connection" +require 'webmock/rspec' +WebMock.disable_net_connect!(allow_localhost: true) +require 'bundler/setup' +require 'cloudflare' +require 'cloudflare/rspec/connection' + +def base_url + %(https://api.cloudflare.com/client/v4) +end + +def zone_id + '1337z0n31d3n71f13r' +end + +def stub_get_zones + stub_request(:get, "#{base_url}/zones/?page=1&per_page=50&scope_type=organization") + .with(cf_headers) + .to_return(status: 200, body: cf_results([{ + name: 'example.com', + ip: '123.123.123.123', + id: zone_id + }]), + headers: {}) +end + +def stub_get_dns_records + dns_record = { + "id": 'b12a037696862c2fc1d45a0e288c82a5', + "type": 'A', + "name": 'www.example.com', + "content": '123.123.123.123', + "ttl": 1, + "zone_id": zone_id, + "zone_name": 'example.com' + } + stub_request(:get, "#{base_url}/zones/#{zone_id}/dns_records/?page=1&per_page=50&scope_type=organization") + .with(cf_headers) + .to_return(status: 200, + body: cf_results([dns_record]), + headers: {}) +end + +def stub_create_dns_record + stub_request(:post, "#{base_url}/zones/#{zone_id}/dns_records") + .with(cf_headers('Content-Type': 'application/json')) + .with( + body: hash_including(:type, :name, :content, :ttl, :proxied) + ) + .to_return(status: 200, + body: cf_results(id: '123231123', type: 'A', name: 'test', content: '123.123.123.123', ttl: 240), + headers: {}) +end + +def stub_find_dns_record_by_id(id) + stub_request(:get, "#{base_url}/zones/#{zone_id}/dns_records") + .with(query: {id: id}) + .with(cf_headers) + .to_return(status: 200, + body: cf_results( + id: '123231123', + type: 'A', + name: 'test', + content: '123.123.123.123', + ttl: 240 + ), + headers: {}) +end + +def stub_get_dns_record(id) + stub_request(:get, "#{base_url}/zones/#{zone_id}/dns_records/#{id}") + .with(cf_headers) + .to_return(status: 200, + body: cf_results( + id: '123231123', + type: 'A', + name: 'test', + content: '123.123.123.123', + ttl: 240 + ), + headers: {}) +end + +def stub_delete_dns_record(id) + stub_request(:delete, "#{base_url}/zones/#{zone_id}/dns_records/#{id}") + .with(cf_headers) + .to_return(status: 200, body: cf_results(id: id), headers: {}) +end + +def stub_find_rule_by_value(ip:) + stub_request(:get, "#{base_url}/zones/#{zone_id}/firewall/access_rules/rules/?configuration_value=#{ip}") + .with(cf_headers) + .to_return(status: 200, + body: cf_results([cf_access_rule('block', '123.123.123.124', 'gemtest')]), + headers: {}) +end + +def stub_list_access_rules(page, rules) + query = URI.encode_www_form(page: page, per_page: 50, scope_type: :organization) + stub_request(:get, "#{base_url}/zones/#{zone_id}/firewall/access_rules/rules/?#{query}") + .with(cf_headers) + .to_return(status: 200, body: cf_results(rules), headers: {}) +end + +def stub_get_access_rule(id) + stub_request(:get, "#{base_url}/zones/#{zone_id}/firewall/access_rules/rules/#{id}") + .with(cf_headers) + .to_return(status: 200, + body: cf_results(cf_access_rule('whitelist', '123.123.123.124', 'gemtest', id)), + headers: {}) +end + +def stub_delete_access_rule(id: nil) + stub_request(:delete, "#{base_url}/zones/#{zone_id}/firewall/access_rules/rules/#{id}") + .with(cf_headers) + .to_return(status: 200, body: cf_results(id: id), headers: {}) +end + +def stub_create_rule(mode, ip, note) + notes = "cloudflare gem firewall_rules [#{mode}] #{note} #{Time.now.strftime('%m/%d/%y')}" + body = "{\"mode\":\"#{mode}\",\"configuration\":{\"target\":\"ip\",\"value\":\"#{ip}\",\"notes\":\"#{notes}\"}}" + stub_request(:post, "https://api.cloudflare.com/client/v4/zones/#{zone_id}/firewall/access_rules/rules") + .with(cf_headers( + 'Content-Length' => body.bytesize, + 'Content-Type' => 'application/json' + )) + .with(body: body) + .to_return(status: 200, body: cf_results(cf_access_rule(mode, ip, notes)), headers: {}) +end + +def stub_purge_cache + stub_request(:post, "#{base_url}/zones/#{zone_id}/purge_cache") + .with(cf_headers) + .to_return(status: 200, body: cf_results(id: zone_id), headers: {}) +end + RSpec.configure do |config| - # Enable flags like --only-failures and --next-failure - config.example_status_persistence_file_path = ".rspec_status" + # Enable flags like --only-failures and --next-failure + config.example_status_persistence_file_path = '.rspec_status' - config.expect_with :rspec do |c| - c.syntax = :expect - end + config.expect_with :rspec do |c| + c.syntax = :expect + end +end + +def cf_results(result, messages = [], errors = []) + {result: result, success: true, messages: messages, errors: errors}.to_json +end + +def cf_headers(extra = {}) + {headers: { + 'Accept' => '*/*', + 'Accept-Encoding' => 'gzip, deflate', + 'Host' => 'api.cloudflare.com', + 'X-Auth-Email' => 'jake@example.net', + 'X-Auth-Key' => '5up3rS3cr3tAuthK3y', + 'X-Auth-User-Service-Key' => '' + }.merge(extra)} +end + +def cf_access_rule(mode, ip, note, id = '12312312' + ip.slice(-1)) + {id: id, mode: mode, notes: note, configuration: {}} end