backdrop 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjRlOWZhMzkyNWQ1YmYwOTQzYWZiYWE0YzRjY2RjOTRlMTg3YTMwNQ==
4
+ M2MzZjUzNDNkMmVhNGUxMTlhNDAyNzYwOGJlZjVlMzk1N2M5MTQ0NQ==
5
5
  data.tar.gz: !binary |-
6
- YTAzYjQwODdkNjNkMjQ1OTNiMjNmOGE3Y2Y5ZDNjYjAzZmNiM2NlMQ==
6
+ YmViMmI4NTBiZGYxM2U0NGJmMzkwZDBkZmM0NWFkZTgwZTU4MGQxZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MDhhYWZkY2YxMGMzODNhYmNhY2UyYmI2NzVlNTRmMGE5M2JjZDhlODgzMzli
10
- NDU1ZGJiN2VjN2I2M2JjODgxNjY4YjgwOTMwYzExYmU2NGU2NTRiZDdhMzY2
11
- YWM3OTIxNjQyMjQ2NTY5YzZmNDZmYWRmY2IxMTc4MmE5NmRmYzA=
9
+ OTAxMDAwODMzZDVmNDFjMmVlYmU1ZmEwNThjYjdhM2MwZWNiNWU5MGJkZjk2
10
+ MWE4NGU5YmI1NDE4OWIwMThjZTgxZGI5OWZkZTI1MzM1M2EwNmFkYjNmNWJm
11
+ MzRiMTYzZDhhNDIwZDhhODYwZWJiMDZkOTc4MzIzYWNlNmJlNTU=
12
12
  data.tar.gz: !binary |-
13
- MDY4YjJiYTI5ZTk2OWVjYWNjMWNjMTFkZTcwNzhmZDBjNDdkNGY3NDY3YmYy
14
- Mzc2OWFiMmNiMTBlNTQzYmRiOWE1NjYwMWM4MWQ0NDFmZTAzMTM3YWYzMWU5
15
- NWMyMDE5OTRkNGI0ODg2MzI3NzUzYjAwNjAyOGQwNTQ5YmMyZjY=
13
+ MDAxYmMxM2MzYmYwOTIwNDY3ZWY4NmQ4YWJkZGYwYjk5N2MyYzhhNWVkODUx
14
+ YjJkN2U1MzEzYTMyMzkxYmUwZjQ2YzhjYmYxM2Y5MjU4ZGRlNGQ3OGE0Yjk0
15
+ MTJkYmFjZDNlOWMzYTg4NjVmYWI4M2M1ZDc1MGFhMWUxYjc1ZWE=
data/.gitignore CHANGED
@@ -7,3 +7,4 @@ lib/tasks/fixtures.rake
7
7
  /tmp
8
8
  /log
9
9
  /doc
10
+ *.orig
@@ -0,0 +1 @@
1
+ backdrop
@@ -0,0 +1 @@
1
+ 2.1.4
@@ -7,7 +7,7 @@ env:
7
7
  global:
8
8
  - CODECLIMATE_REPO_TOKEN=a79c2033f8bd8de4442fbffdee847be7f8a505408ef40350ac598264d2fe2ccc
9
9
  rvm:
10
- - 2.1.2
10
+ - 2.1.4
11
11
  - 2.0.0
12
12
  script:
13
13
  - bundle exec rake
data/Gemfile CHANGED
@@ -6,8 +6,9 @@ group :test do
6
6
  gem 'byebug'
7
7
  gem 'codeclimate-test-reporter', require: false
8
8
  gem 'coveralls', require: false
9
+ gem 'factory_girl'
9
10
  gem 'rack-test'
10
- gem 'rake_rack'
11
+ gem 'rake-n-bake'
11
12
  gem 'rspec'
12
13
  gem 'rubocop'
13
14
  gem 'simplecov', require: false
data/README.md CHANGED
@@ -45,6 +45,6 @@ lib/tasks/backdrop.rake
45
45
  Call `rake backdrop` to create all RAD APIs in the specified output directory
46
46
 
47
47
  Dependencies
48
- ============
48
+ ------------
49
49
 
50
50
  * Ruby >= 2.0.0
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
1
  Dir.glob('lib/tasks/*.rake').each { |task| import task }
2
+ require 'rake_n_bake'
@@ -5,14 +5,16 @@ Gem::Specification.new do |s|
5
5
  s.name = 'backdrop'
6
6
  s.version = Backdrop::VERSION
7
7
  s.date = '2014-09-16'
8
- s.summary = 'Fixture generation using RAD'
9
- s.description = 'Fixture generation using RAD'
10
- s.authors = ['Tom Bowden', 'Richard Vickerstaff', 'Adam Whittingham']
8
+ s.summary = 'JSON Fixture generation'
9
+ s.description = 'Create and host fixture generation based on simple ruby
10
+ objects for use in local integration testing against
11
+ multiple remote APIs'
12
+ s.authors = ['Tom Bowden']
11
13
  s.files = `git ls-files`.split($RS)
12
14
  s.email = 'tom.b1992@gmail.com'
13
15
  s.homepage = 'http://github.com/tpbowden/backdrop'
14
16
  s.license = 'MIT'
15
17
  s.required_ruby_version = '>= 2.0.0'
16
- s.add_dependency 'sinatra', '~> 1.4'
17
18
  s.add_dependency 'rake', '~> 10.1'
19
+ s.add_dependency 'sinatra', '~> 1.4'
18
20
  end
@@ -1,11 +1,5 @@
1
- require 'sinatra/base'
2
- require 'backdrop/version'
3
1
  require 'backdrop/configuration'
4
- require 'backdrop/runner'
5
- require 'backdrop/extractor'
6
- require 'backdrop/builders/builder'
7
- require 'backdrop/builders/get'
8
- require 'backdrop/builders/put'
2
+ require 'backdrop/api_builder'
9
3
  require 'backdrop/app'
10
4
 
11
5
  module Backdrop
@@ -20,4 +14,12 @@ module Backdrop
20
14
  def self.configure
21
15
  yield(configuration) if block_given?
22
16
  end
17
+
18
+ def self.load(input)
19
+ APIBuilder.new.build input
20
+ end
21
+
22
+ def self.clear
23
+ Backdrop::App.reset!
24
+ end
23
25
  end
@@ -0,0 +1,29 @@
1
+ require 'backdrop/app'
2
+
3
+ module Backdrop
4
+ class APIBuilder
5
+ def build(input)
6
+ if input.respond_to?(:map)
7
+ build_array(input)
8
+ else
9
+ build_single(input)
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def build_array(input)
16
+ url = nil
17
+ formatted_data = input.map do |record|
18
+ url = record.delete_field 'backdrop_url'
19
+ record.to_h
20
+ end
21
+ Backdrop::App.load_api(url, JSON.generate(formatted_data))
22
+ end
23
+
24
+ def build_single(input)
25
+ url = input.delete_field('backdrop_url')
26
+ Backdrop::App.load_api(url, JSON.generate(input.to_h))
27
+ end
28
+ end
29
+ end
@@ -1,27 +1,10 @@
1
+ require 'sinatra'
2
+
1
3
  module Backdrop
2
4
  class App < Sinatra::Base
3
- SUPPORTED_HTTP_METHODS = [:get, :put]
4
-
5
- def initialize(app = nil)
6
- super app
7
- self.class.build_routes
8
- end
9
-
10
- def self.build_routes
11
- SUPPORTED_HTTP_METHODS.each do |method|
12
- files = Dir["#{Backdrop.configuration.output_dir}/**/*.#{method}"]
13
- files.each do |file|
14
- route = file.gsub Backdrop.configuration.output_dir, ''
15
- route = route.gsub ".#{method}", ''
16
- build_route(method, route, file)
17
- end
18
- end
19
- end
20
-
21
- def self.build_route(method, route, file)
22
- send(method, route) do
23
- builder = Backdrop::Builders.const_get(method.to_s.capitalize).new
24
- builder.route(self, file)
5
+ def self.load_api(url, data)
6
+ get url do
7
+ data
25
8
  end
26
9
  end
27
10
  end
@@ -1,32 +1,4 @@
1
1
  module Backdrop
2
2
  class Configuration
3
- attr_accessor :output_dir
4
- attr_accessor :projects
5
- attr_reader :http
6
-
7
- def initialize
8
- @output_dir = './fixtures'
9
- @projects = []
10
- @http = Http.new
11
- end
12
-
13
- class Http
14
- attr_accessor :get
15
- attr_accessor :put
16
- attr_reader :http_methods
17
-
18
- def initialize
19
- @get = Backdrop::Builders::Get
20
- @put = Backdrop::Builders::Put
21
- @http_methods = [:get, :put]
22
- end
23
-
24
- def method_missing(method, arg)
25
- http_method = method.to_s.gsub('=', '')
26
- self.class.__send__(:attr_accessor, http_method)
27
- send(method, arg)
28
- @http_methods << (http_method.to_sym)
29
- end
30
- end
31
3
  end
32
4
  end
@@ -1,3 +1,3 @@
1
1
  module Backdrop
2
- VERSION = '0.2.5'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,8 +1,6 @@
1
- require 'rake_rack'
2
-
3
1
  task default: [
4
2
  :rubocop,
5
- :"rake_rack:rspec",
6
- :"rake_rack:coverage:check_specs",
7
- :"rake_rack:ok_rainbow"
3
+ :"bake:rspec",
4
+ :"bake:coverage:check_specs",
5
+ :"bake:ok_rainbow"
8
6
  ]
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'backdrop/api_builder'
3
+
4
+ describe Backdrop::APIBuilder do
5
+ describe '#build' do
6
+ let(:url) { '/some/location' }
7
+
8
+ context 'when the input is a single item' do
9
+ let(:sample_input) { build :example, backdrop_url: url }
10
+ let(:json) { '{"some":"data"}' }
11
+ it 'tells the server to load the API' do
12
+ expect(Backdrop::App).to receive(:load_api).with url, json
13
+ subject.build sample_input
14
+ end
15
+ end
16
+
17
+ context 'when the input is an array of items' do
18
+ let(:sample_input) { build_list :example, 2, backdrop_url: url }
19
+ let(:json) { '[{"some":"data"},{"some":"data"}]' }
20
+ it 'tells the server to load the API array' do
21
+ expect(Backdrop::App).to receive(:load_api).with url, json
22
+ subject.build sample_input
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,61 +3,4 @@ require 'backdrop'
3
3
 
4
4
  describe Backdrop::Configuration do
5
5
 
6
- describe '#output_dir' do
7
- it 'defaults to ./fixtures' do
8
- expect(subject.output_dir).to eq './fixtures'
9
- end
10
- end
11
-
12
- describe '#output_dir=' do
13
- it 'can be configured' do
14
- subject.output_dir = 'somewhere'
15
- expect(subject.output_dir).to eq 'somewhere'
16
- end
17
- end
18
-
19
- describe '#projects' do
20
- it 'defaults to empty array' do
21
- expect(subject.projects).to eq []
22
- end
23
- it 'can be configured' do
24
- subject.projects = [1, 2]
25
- expect(subject.projects).to eq [1, 2]
26
- end
27
- end
28
-
29
- describe '#http' do
30
- it 'allows the assignment of any method' do
31
- expect(subject.http).to be_a Backdrop::Configuration::Http
32
- end
33
- end
34
-
35
- describe Backdrop::Configuration::Http do
36
- describe '#http_methods' do
37
- it 'defaults the HTTP methods to the ones with defaults' do
38
- expect(subject.http_methods).to eq [:get, :put]
39
- end
40
- end
41
-
42
- describe '#METHOD' do
43
-
44
- it 'allows anything to be set' do
45
- subject.something = 'hello'
46
- expect(subject.something).to eq 'hello'
47
- end
48
-
49
- it 'adds new methods to the http_methods array' do
50
- subject.val = 'something'
51
- expect(subject.http_methods).to include(:val)
52
- end
53
-
54
- it 'sets get to be a GET builder' do
55
- expect(subject.get).to eq Backdrop::Builders::Get
56
- end
57
-
58
- it 'sets put to be the PUT builder' do
59
- expect(subject.put).to eq Backdrop::Builders::Put
60
- end
61
- end
62
- end
63
6
  end
@@ -20,14 +20,26 @@ describe Backdrop do
20
20
  end
21
21
 
22
22
  describe '.reset' do
23
- before do
24
- Backdrop.configure do |config|
25
- config.output_dir = 'somewhere'
26
- end
27
- end
23
+ let!(:subject) { Backdrop.configuration }
28
24
  it 'resets all configuration' do
29
25
  Backdrop.reset
30
- expect(Backdrop.configuration.output_dir).to eq './fixtures'
26
+ expect(Backdrop.configuration).to_not eq subject
27
+ end
28
+ end
29
+
30
+ describe '.load' do
31
+ let(:input) { %w('some', 'data') }
32
+ it 'delegates to the Backdrop API Builder' do
33
+ expect(Backdrop::APIBuilder)
34
+ .to receive_message_chain('new.build').with input
35
+ described_class.load input
36
+ end
37
+ end
38
+
39
+ describe '.clear' do
40
+ it 'clears all routes from the web server' do
41
+ expect(Backdrop::App).to receive(:reset!)
42
+ Backdrop.clear
31
43
  end
32
44
  end
33
45
  end
@@ -0,0 +1,8 @@
1
+ require 'ostruct'
2
+
3
+ FactoryGirl.define do
4
+ factory :example, class: OpenStruct do
5
+ backdrop_url '/example/data'
6
+ some 'data'
7
+ end
8
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'rack/test'
3
+ require 'backdrop'
4
+
5
+ describe Backdrop do
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ Backdrop::App
10
+ end
11
+
12
+ before do
13
+ Backdrop.clear
14
+ Backdrop.load sample_factory_data
15
+ end
16
+
17
+ context 'when it is a single object' do
18
+ let(:sample_factory_data) { build :example }
19
+
20
+ it 'builds an API based on factory girl data' do
21
+ get '/example/data'
22
+ expect(last_response.body).to eq '{"some":"data"}'
23
+ end
24
+ end
25
+
26
+ context 'when it is an array of objects' do
27
+ let(:sample_factory_data) { build_list :example, 2 }
28
+
29
+ it 'builds an API based on the array of factory girl data' do
30
+ get '/example/data'
31
+ expect(last_response.body).to eq '[{"some":"data"},{"some":"data"}]'
32
+ end
33
+ end
34
+ end
@@ -22,9 +22,13 @@ SimpleCov.start do
22
22
  add_filter 'spec'
23
23
  end
24
24
 
25
+ require 'factory_girl'
26
+ FactoryGirl.find_definitions
27
+
25
28
  RSpec.configure do |config|
26
29
 
27
30
  config.default_formatter = 'doc' if config.files_to_run.one?
31
+ config.include FactoryGirl::Syntax::Methods
28
32
 
29
33
  config.order = :random
30
34
 
metadata CHANGED
@@ -1,46 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backdrop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Bowden
8
- - Richard Vickerstaff
9
- - Adam Whittingham
10
8
  autorequire:
11
9
  bindir: bin
12
10
  cert_chain: []
13
11
  date: 2014-09-16 00:00:00.000000000 Z
14
12
  dependencies:
15
13
  - !ruby/object:Gem::Dependency
16
- name: sinatra
14
+ name: rake
17
15
  requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '1.4'
19
+ version: '10.1'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
23
  requirements:
26
24
  - - ~>
27
25
  - !ruby/object:Gem::Version
28
- version: '1.4'
26
+ version: '10.1'
29
27
  - !ruby/object:Gem::Dependency
30
- name: rake
28
+ name: sinatra
31
29
  requirement: !ruby/object:Gem::Requirement
32
30
  requirements:
33
31
  - - ~>
34
32
  - !ruby/object:Gem::Version
35
- version: '10.1'
33
+ version: '1.4'
36
34
  type: :runtime
37
35
  prerelease: false
38
36
  version_requirements: !ruby/object:Gem::Requirement
39
37
  requirements:
40
38
  - - ~>
41
39
  - !ruby/object:Gem::Version
42
- version: '10.1'
43
- description: Fixture generation using RAD
40
+ version: '1.4'
41
+ description: ! "Create and host fixture generation based on simple ruby\n objects
42
+ for use in local integration testing against\n multiple remote
43
+ APIs"
44
44
  email: tom.b1992@gmail.com
45
45
  executables: []
46
46
  extensions: []
@@ -49,33 +49,25 @@ files:
49
49
  - .gitignore
50
50
  - .rspec
51
51
  - .rubocop.yml
52
- - .rvmrc
52
+ - .ruby-gemset
53
+ - .ruby-version
53
54
  - .travis.yml
54
55
  - Gemfile
55
56
  - README.md
56
57
  - Rakefile
57
58
  - backdrop.gemspec
58
- - config.ru
59
59
  - lib/backdrop.rb
60
+ - lib/backdrop/api_builder.rb
60
61
  - lib/backdrop/app.rb
61
- - lib/backdrop/builders/builder.rb
62
- - lib/backdrop/builders/get.rb
63
- - lib/backdrop/builders/put.rb
64
62
  - lib/backdrop/configuration.rb
65
- - lib/backdrop/extractor.rb
66
- - lib/backdrop/rake_task.rb
67
- - lib/backdrop/runner.rb
68
63
  - lib/backdrop/version.rb
69
64
  - lib/tasks/default.rake
70
65
  - lib/tasks/rubocop.rake
71
- - spec/backdrop/builders/builder_spec.rb
72
- - spec/backdrop/builders/get_spec.rb
73
- - spec/backdrop/builders/put_spec.rb
66
+ - spec/backdrop/api_builder_spec.rb
74
67
  - spec/backdrop/configuration_spec.rb
75
- - spec/backdrop/extractor_spec.rb
76
- - spec/backdrop/runner_spec.rb
77
68
  - spec/backdrop_spec.rb
78
- - spec/integration/backdrop_spec.rb
69
+ - spec/factories/example_factory.rb
70
+ - spec/integration/backdrop_end_to_end_spec.rb
79
71
  - spec/spec_helper.rb
80
72
  homepage: http://github.com/tpbowden/backdrop
81
73
  licenses:
@@ -97,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
89
  version: '0'
98
90
  requirements: []
99
91
  rubyforge_project:
100
- rubygems_version: 2.4.1
92
+ rubygems_version: 2.4.2
101
93
  signing_key:
102
94
  specification_version: 4
103
- summary: Fixture generation using RAD
95
+ summary: JSON Fixture generation
104
96
  test_files: []
data/config.ru DELETED
@@ -1,3 +0,0 @@
1
- require 'backdrop'
2
-
3
- Backdrop::App.run!
@@ -1,13 +0,0 @@
1
- module Backdrop
2
- class Builder
3
- def build_response(output, project, data, response)
4
- file = data['requests'].first['request_path'].split('?')[0]
5
- method = data['http_method'].downcase
6
- path = File.dirname file
7
- filename = File.basename file
8
- filepath = File.join(output, project, path)
9
- FileUtils.mkdir_p filepath
10
- File.write("#{File.join(filepath, filename)}.#{method}", response)
11
- end
12
- end
13
- end
@@ -1,15 +0,0 @@
1
- module Backdrop
2
- module Builders
3
- class Get < Builder
4
- def route(app, file)
5
- app.content_type :json
6
- File.read File.expand_path(file)
7
- end
8
-
9
- def build(output, project, data)
10
- response = data['requests'].first['response_body']
11
- build_response(output, project, data, response)
12
- end
13
- end
14
- end
15
- end
@@ -1,16 +0,0 @@
1
- module Backdrop
2
- module Builders
3
- class Put < Builder
4
- def route(app, file)
5
- app.content_type :json
6
- code = File.read File.expand_path(file)
7
- app.status code.to_i
8
- end
9
-
10
- def build(output, project, data)
11
- response = data['requests'].first['response_status']
12
- build_response(output, project, data, response)
13
- end
14
- end
15
- end
16
- end
@@ -1,27 +0,0 @@
1
- require 'json'
2
-
3
- module Backdrop
4
- class Extractor
5
- def project_name(path)
6
- path.gsub('/workspace', '').match(/\/(\w+)$/).captures.first
7
- end
8
-
9
- def load_docs(project_path)
10
- docs_dir = File.join(File.expand_path(project_path), 'doc/api')
11
- Dir["#{docs_dir}/**/*.json"]
12
- .reject { |filename| filename =~ /index\.json$/ }
13
- end
14
-
15
- def build_apis(project, rad_json, output_dir)
16
- rad_json.each do |json_file|
17
- json = JSON.parse File.read(json_file)
18
- method = json['http_method'].downcase.to_sym
19
- supported_methods = Backdrop.configuration.http.http_methods
20
- if supported_methods.include? method
21
- builder = Backdrop.configuration.http.send(method)
22
- builder.new.build output_dir, project, json
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,14 +0,0 @@
1
- require 'rake'
2
- require 'rake/tasklib'
3
- require 'backdrop'
4
-
5
- module Backdrop
6
- class RakeTask < Rake::TaskLib
7
- def initialize(output_dir, projects)
8
- desc 'Run backdrop'
9
- task :backdrop do
10
- Backdrop::Runner.new(output_dir, projects).run
11
- end
12
- end
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- module Backdrop
2
- class Runner
3
- def initialize(output_dir, projects)
4
- @projects = projects
5
- @output_dir = output_dir
6
- end
7
-
8
- def run
9
- FileUtils.rm_rf @output_dir
10
- extractor = Backdrop::Extractor.new
11
- @projects.each do |project_path|
12
- project_name = extractor.project_name(project_path)
13
- json_to_emulate = extractor.load_docs(project_path)
14
- extractor.build_apis project_name, json_to_emulate, @output_dir
15
- end
16
- end
17
- end
18
- end
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
- require 'backdrop'
3
-
4
- describe Backdrop::Builder do
5
- describe '#build_response' do
6
-
7
- before do
8
- @output_dir = Dir.mktmpdir('output')
9
- end
10
-
11
- after do
12
- FileUtils.remove_entry_secure @output_dir
13
- end
14
-
15
- context 'when the path has no query params' do
16
-
17
- let(:sample_data) do
18
- { 'http_method' => 'GET',
19
- 'route' => '/project/:property',
20
- 'requests' => [{
21
- 'request_path' => '/resource/get_request',
22
- 'response_body' => '{"Hello":"World"}'
23
- }] }
24
- end
25
- let(:project) { 'project' }
26
- let(:response) { 'some response' }
27
-
28
- it 'creates the response file with given input' do
29
- subject.build_response(@output_dir, project, sample_data, response)
30
- output = File.read(
31
- "#{File.join(@output_dir, 'project', '/resource/get_request')}.get"
32
- )
33
- expect(output).to eq response
34
- end
35
- end
36
-
37
- context 'when the path has query params' do
38
-
39
- let(:sample_data) do
40
- { 'http_method' => 'GET',
41
- 'route' => '/project/:property',
42
- 'requests' => [{
43
- 'request_path' => '/resource/get_request?query=something',
44
- 'response_body' => '{"Hello":"World"}'
45
- }] }
46
- end
47
- let(:project) { 'project' }
48
- let(:response) { 'some response' }
49
-
50
- it 'creates the response file, stripping the query params' do
51
- subject.build_response(@output_dir, project, sample_data, response)
52
- output = File.read(
53
- "#{File.join(@output_dir, 'project', '/resource/get_request')}.get"
54
- )
55
- expect(output).to eq response
56
- end
57
- end
58
- end
59
- end
@@ -1,49 +0,0 @@
1
- require 'backdrop'
2
- describe Backdrop::Builders::Get do
3
- describe '#route' do
4
- let(:app) { double :app }
5
- let(:file) { Tempfile.new 'file' }
6
-
7
- before do
8
- file.write('Hello World')
9
- file.rewind
10
- allow(app).to receive(:content_type).with(:json)
11
- end
12
-
13
- it 'sets the content type to json' do
14
- subject.route app, file
15
- expect(app).to have_received(:content_type).with :json
16
- end
17
-
18
- it 'returns the contents of the file' do
19
- expect(subject.route app, file).to eq 'Hello World'
20
- end
21
- end
22
-
23
- describe '#build' do
24
- before do
25
- @output_dir = Dir.mktmpdir('output')
26
- end
27
-
28
- after do
29
- FileUtils.remove_entry_secure @output_dir
30
- end
31
-
32
- let(:data) do
33
- { 'http_method' => 'GET',
34
- 'route' => '/project/:property',
35
- 'requests' => [{
36
- 'request_path' => '/resource/request',
37
- 'response_body' => '{"Hello":"World"}'
38
- }] }
39
- end
40
-
41
- it 'creates a file for each request' do
42
- subject.build @output_dir, 'project', data
43
- output = File.read(
44
- "#{File.join(@output_dir, 'project', 'resource/request')}.get"
45
- )
46
- expect(output).to eq '{"Hello":"World"}'
47
- end
48
- end
49
- end
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
- require 'backdrop'
3
-
4
- describe Backdrop::Builders::Put do
5
- describe '#route' do
6
- let(:app) { double :app }
7
- let(:file) { Tempfile.new 'file' }
8
-
9
- before do
10
- file.write(200)
11
- file.rewind
12
- allow(app).to receive(:content_type).with(:json)
13
- allow(app).to receive(:status).with 200
14
- end
15
- it 'sets the content type to json' do
16
- subject.route app, file
17
- expect(app).to have_received(:content_type).with(:json)
18
- end
19
-
20
- it 'sets the status code to the contents of file' do
21
- subject.route app, file
22
- expect(app).to have_received(:status).with 200
23
- end
24
- end
25
-
26
- describe '#build' do
27
-
28
- before do
29
- @output_dir = Dir.mktmpdir('output')
30
- end
31
-
32
- after do
33
- FileUtils.remove_entry_secure @output_dir
34
- end
35
-
36
- let(:data) do
37
- { 'http_method' => 'PUT',
38
- 'route' => '/project/:property',
39
- 'requests' => [{
40
- 'request_path' => '/resource/request',
41
- 'response_body' => '{"Hello":"World"}',
42
- 'response_status' => 201
43
- }] }
44
- end
45
-
46
- it 'creates a file with the status for each request' do
47
- subject.build @output_dir, 'project', data
48
- output = File.read(
49
- "#{File.join(@output_dir, 'project', '/resource/request')}.put"
50
- )
51
- expect(output).to eq '201'
52
- end
53
- end
54
- end
@@ -1,81 +0,0 @@
1
- require 'spec_helper'
2
- require 'backdrop'
3
- require 'tmpdir'
4
- require 'tempfile'
5
-
6
- describe Backdrop::Extractor do
7
-
8
- describe '#project_name' do
9
- context 'when running a normal project' do
10
- let(:file_path) { '/files/projects/name' }
11
-
12
- it 'works out the project name based on its path' do
13
- expect(subject.project_name(file_path)).to eq 'name'
14
- end
15
- end
16
-
17
- context 'when running a project on Jenkins' do
18
- let(:file_path) { '/files/projects/jenkins_project/workspace' }
19
- it 'strips workspace/ from the path (for Jenkins builds)' do
20
- expect(subject.project_name(file_path)).to eq 'jenkins_project'
21
- end
22
- end
23
- end
24
-
25
- describe '#build_apis' do
26
- let(:builder) { double :builder }
27
-
28
- context 'when the method is defined' do
29
- let(:json) { { 'http_method' => 'GET' } }
30
-
31
- before do
32
- allow(Backdrop::Builders::Get).to receive(:new)
33
- .and_return builder
34
- @json_file = Tempfile.new 'file.json'
35
- @json_file.write(JSON.generate json)
36
- @json_file.rewind
37
- end
38
-
39
- it 'creates an API for each request' do
40
- expect(builder).to receive(:build).with('output', 'project', json)
41
- subject.build_apis 'project', [@json_file.path], 'output'
42
- end
43
- end
44
-
45
- context 'when the method is not defined' do
46
- let(:json) { { 'http_method' => 'SOMETHING' } }
47
-
48
- before do
49
- allow(Backdrop::Builders::Get).to receive(:new)
50
- .and_return builder
51
- @json_file = Tempfile.new 'file.json'
52
- @json_file.write(JSON.generate json)
53
- @json_file.rewind
54
- end
55
-
56
- it 'creates an API for each request' do
57
- expect(builder).to_not receive(:build)
58
- subject.build_apis 'project', [@json_file.path], 'output'
59
- end
60
- end
61
- end
62
-
63
- describe '#load_docs' do
64
- before do
65
- @dir = Dir.mktmpdir
66
- FileUtils.mkdir_p("#{@dir}/doc/api")
67
- File.write("#{@dir}/doc/api/index.json", '{"hello":"world"}')
68
- File.write("#{@dir}/doc/api/api.json", '{"json":"api"}')
69
- end
70
-
71
- after do
72
- FileUtils.remove_entry_secure @dir
73
- end
74
-
75
- it 'loads the files but excludes the index.json' do
76
- expect(subject.load_docs(@dir)).to match_array([
77
- "#{@dir}/doc/api/api.json"
78
- ])
79
- end
80
- end
81
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
- require 'backdrop'
3
-
4
- describe Backdrop::Runner do
5
-
6
- let(:output_dir) { '/fixtures' }
7
- let(:project_paths) { ['/project/path'] }
8
- let(:project_name) { 'path' }
9
- let(:rad_docs) { ['file.json'] }
10
- let(:subject) { Backdrop::Runner.new(output_dir, project_paths) }
11
-
12
- describe '#run' do
13
- let(:extractor) do
14
- double :extractor, project_name: project_name, load_docs: rad_docs
15
- end
16
- let(:builder) { double :builder }
17
-
18
- before do
19
- allow(Backdrop::Extractor).to receive(:new).and_return extractor
20
- end
21
-
22
- it 'works out the project name' do
23
- expect(extractor).to receive(:build_apis).with(
24
- project_name,
25
- rad_docs,
26
- output_dir
27
- )
28
- subject.run
29
- end
30
- end
31
- end
@@ -1,73 +0,0 @@
1
- require 'spec_helper'
2
- require 'backdrop'
3
- require 'tmpdir'
4
- require 'rack/test'
5
-
6
- describe 'Backdrop' do
7
- include Rack::Test::Methods
8
-
9
- before(:all) do
10
- @test_dir = Dir.mktmpdir
11
- end
12
-
13
- after(:all) do
14
- FileUtils.remove_entry_secure @test_dir
15
- end
16
- let(:subject) { Backdrop::Runner.new(output_path, [project_path]) }
17
- let(:output_path) { File.join(@test_dir, 'output') }
18
- let(:project_path) { File.join(@test_dir, 'project') }
19
-
20
- def app
21
- Backdrop.configure do |config|
22
- config.output_dir = output_path
23
- end
24
- Backdrop::App
25
- end
26
-
27
- describe 'running with an out directory and API project' do
28
- let(:put_output) do
29
- { 'http_method' => 'PUT',
30
- 'route' => 'resource/:property',
31
- 'requests' => [{
32
- 'response_body' => nil,
33
- 'request_path' => '/resource/put_request',
34
- 'response_status' => 201
35
- }] }
36
- end
37
-
38
- let(:get_output) do
39
- { 'http_method' => 'GET',
40
- 'route' => '/resource/:property',
41
- 'requests' => [{
42
- 'request_path' => '/resource/get_request',
43
- 'response_body' => '{"Hello":"World"}'
44
- }] }
45
- end
46
- before do
47
- FileUtils.mkdir_p(File.join(project_path, 'doc/api/resource'))
48
- File.write(
49
- File.join(project_path, '/doc/api/put_request.json'),
50
- JSON.generate(put_output)
51
- )
52
- File.write(
53
- File.join(project_path, '/doc/api/get_request.json'),
54
- JSON.generate(get_output)
55
- )
56
- subject.run
57
- end
58
-
59
- context 'when the method is PUT' do
60
- it 'responds with the correct status' do
61
- put '/project/resource/put_request'
62
- expect(last_response.status).to eq 201
63
- end
64
- end
65
-
66
- context 'when the method is GET' do
67
- it 'responds with the response body' do
68
- get '/project/resource/get_request'
69
- expect(last_response.body).to eq '{"Hello":"World"}'
70
- end
71
- end
72
- end
73
- end