Add initial terms and conditions support
This commit is contained in:
		
							parent
							
								
									6c7451209f
								
							
						
					
					
						commit
						12c99e1b69
					
				
					 12 changed files with 187 additions and 48 deletions
				
			
		| 
						 | 
					@ -1,5 +1,41 @@
 | 
				
			||||||
<% # License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later %>
 | 
					<% # License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Open Sans */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					  font-family: 'Open Sans';
 | 
				
			||||||
 | 
					  src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot') %>');
 | 
				
			||||||
 | 
					  src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot?#iefix') %>') format('embedded-opentype'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-regular-webfont.woff') %>') format('woff'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-regular-webfont.ttf') %>') format('truetype'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-regular-webfont.svg#open_sansregular') %>') format('svg');
 | 
				
			||||||
 | 
					  font-weight: normal;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					  font-family: 'Open Sans';
 | 
				
			||||||
 | 
					  src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot') %>');
 | 
				
			||||||
 | 
					  src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot?#iefix') %>') format('embedded-opentype'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-light-webfont.woff') %>') format('woff'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-light-webfont.ttf') %>') format('truetype'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-light-webfont.svg#open_sanslight') %>') format('svg');
 | 
				
			||||||
 | 
					  font-weight: 200;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					  font-family: 'Open Sans';
 | 
				
			||||||
 | 
					  src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot') %>');
 | 
				
			||||||
 | 
					  src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot?#iefix') %>') format('embedded-opentype'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-bold-webfont.woff') %>') format('woff'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-bold-webfont.ttf') %>') format('truetype'),
 | 
				
			||||||
 | 
					  url('<%= asset_path('Open_Sans/opensans-bold-webfont.svg#open_sansbold') %>') format('svg');
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Bitter */
 | 
					/* Bitter */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$condensed: '<%= asset_path('Open_Sans_Condensed') %>';
 | 
					$condensed: '<%= asset_path('Open_Sans_Condensed') %>';
 | 
				
			||||||
| 
						 | 
					@ -38,37 +74,4 @@ $condensed: '<%= asset_path('Open_Sans_Condensed') %>';
 | 
				
			||||||
	font-style: normal;
 | 
						font-style: normal;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Open Sans */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@font-face {
 | 
					 | 
				
			||||||
	font-family: 'Open Sans';
 | 
					 | 
				
			||||||
	src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot') %>');
 | 
					 | 
				
			||||||
	src: url('<%= asset_path('Open_Sans/opensans-regular-webfont.eot?#iefix') %>') format('embedded-opentype'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-regular-webfont.woff') %>') format('woff'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-regular-webfont.ttf') %>') format('truetype'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-regular-webfont.svg#open_sansregular') %>') format('svg');
 | 
					 | 
				
			||||||
	font-weight: normal;
 | 
					 | 
				
			||||||
	font-style: normal;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@font-face {
 | 
					 | 
				
			||||||
	font-family: 'Open Sans';
 | 
					 | 
				
			||||||
	src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot') %>');
 | 
					 | 
				
			||||||
	src: url('<%= asset_path('Open_Sans/opensans-light-webfont.eot?#iefix') %>') format('embedded-opentype'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-light-webfont.woff') %>') format('woff'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-light-webfont.ttf') %>') format('truetype'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-light-webfont.svg#open_sanslight') %>') format('svg');
 | 
					 | 
				
			||||||
	font-weight: 200;
 | 
					 | 
				
			||||||
	font-style: normal;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@font-face {
 | 
					 | 
				
			||||||
	font-family: 'Open Sans';
 | 
					 | 
				
			||||||
	src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot') %>');
 | 
					 | 
				
			||||||
	src: url('<%= asset_path('Open_Sans/opensans-bold-webfont.eot?#iefix') %>') format('embedded-opentype'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-bold-webfont.woff') %>') format('woff'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-bold-webfont.ttf') %>') format('truetype'),
 | 
					 | 
				
			||||||
		url('<%= asset_path('Open_Sans/opensans-bold-webfont.svg#open_sansbold') %>') format('svg');
 | 
					 | 
				
			||||||
	font-weight: bold;
 | 
					 | 
				
			||||||
	font-style: normal;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,12 +21,16 @@
 | 
				
			||||||
    display: flex;
 | 
					    display: flex;
 | 
				
			||||||
    height: 100%;
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    * {
 | 
					    > * {
 | 
				
			||||||
      opacity: 0.5;
 | 
					      opacity: 0.5;
 | 
				
			||||||
      margin: auto 0;
 | 
					      margin: auto 10px auto 0;
 | 
				
			||||||
      margin-right:10px;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  a {
 | 
				
			||||||
 | 
					    color:$charcoal
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.site-content {
 | 
					.site-content {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										24
									
								
								app/controllers/static_controller.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								app/controllers/static_controller.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					class StaticController < ApplicationController
 | 
				
			||||||
 | 
					  layout 'layouts/static'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def terms_and_privacy
 | 
				
			||||||
 | 
					    @theme = 'minimal'
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def ccs
 | 
				
			||||||
 | 
					    ccs_method = !Settings.ccs ? 'local_tar_gz' : Settings.ccs.ccs_method
 | 
				
			||||||
 | 
					    if (ccs_method == 'local_tar_gz')
 | 
				
			||||||
 | 
					      temp_file = "#{$RAILS_ROOT}/tmp/#{Time.current.to_i}.tar.gz"
 | 
				
			||||||
 | 
					      result = Kernel.system("git archive --format=tar.gz -o #{temp_file} HEAD")
 | 
				
			||||||
 | 
					      if result
 | 
				
			||||||
 | 
					        send_file(temp_file, :type => "application/gzip")
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        render :nothing => true, :status => 500
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    elsif (ccs_method == 'github')
 | 
				
			||||||
 | 
					      git_hash = File.read("#{$RAILS_ROOT}/CCS_HASH")
 | 
				
			||||||
 | 
					      redirect_to "https://github.com/#{Settings.ccs.options.account}/#{Settings.ccs.options.repo}/tree/#{git_hash}"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
    <div class="container">
 | 
					    <div class="container">
 | 
				
			||||||
      <span>© 2018 <%= Settings.general.name %></span>
 | 
					      <span>© 2018 <%= Settings.general.name %></span>
 | 
				
			||||||
      <span>About</span>
 | 
					      <span>About</span>
 | 
				
			||||||
      <span>Terms & Privacy</span>
 | 
					      <span><%= link_to "Terms & Privacy", controller: :static, action: :terms_and_privacy %></span>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,18 +14,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <%= render 'layouts/stylesheets' %>
 | 
					  <%= render 'layouts/stylesheets' %>
 | 
				
			||||||
  <%= IncludeAsset.css 'client/css/global/page.css' %>
 | 
					  <%= IncludeAsset.css '/client/css/global/page.css' %>
 | 
				
			||||||
  <%= IncludeAsset.css 'client/css/bootstrap.css' %>
 | 
					  <%= IncludeAsset.css '/client/css/bootstrap.css' %>
 | 
				
			||||||
  <style>
 | 
					  <style>
 | 
				
			||||||
    body {padding-left: 0}
 | 
					    body {padding-left: 0}
 | 
				
			||||||
  </style>
 | 
					  </style>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
<%= render 'layouts/apified_header' %>
 | 
					<%= render 'layouts/apified_header' %>
 | 
				
			||||||
<%= IncludeAsset.js 'app/loading_indicator.js' %>
 | 
					<%= IncludeAsset.js '/app/loading_indicator.js' %>
 | 
				
			||||||
<%= IncludeAsset.js 'app/react.js' %>
 | 
					<%= IncludeAsset.js '/app/react.js' %>
 | 
				
			||||||
<%= IncludeAsset.js 'app/react-dom.js' %>
 | 
					<%= IncludeAsset.js '/app/react-dom.js' %>
 | 
				
			||||||
<%= IncludeAsset.js 'app/vendor.js' %>
 | 
					<%= IncludeAsset.js '/app/vendor.js' %>
 | 
				
			||||||
<%= yield :javascripts %>
 | 
					<%= yield :javascripts %>
 | 
				
			||||||
<div class="site-content">
 | 
					<div class="site-content">
 | 
				
			||||||
  <%= yield %>
 | 
					  <%= yield %>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
    <%= yield %>
 | 
					    <%= yield %>
 | 
				
			||||||
    <%= render 'components/global_loading' %>
 | 
					    <%= render 'components/global_loading' %>
 | 
				
			||||||
    <%= render 'layouts/page_modals' %gi
 | 
					    <%= render 'layouts/page_modals' %>
 | 
				
			||||||
    <%= render 'layouts/javascripts' %>
 | 
					    <%= render 'layouts/javascripts' %>
 | 
				
			||||||
  </body>
 | 
					  </body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										21
									
								
								app/views/layouts/static.html.erb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								app/views/layouts/static.html.erb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					<%- # License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later -%>
 | 
				
			||||||
 | 
					<!doctype html>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					  <%= render 'layouts/stylesheets' %>
 | 
				
			||||||
 | 
					  <%= IncludeAsset.css '/client/css/global/page.css' %>
 | 
				
			||||||
 | 
					  <%= IncludeAsset.css '/client/css/bootstrap.css' %>
 | 
				
			||||||
 | 
					  <style>
 | 
				
			||||||
 | 
					    body {padding-left: 0}
 | 
				
			||||||
 | 
					  </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					<%= render 'layouts/apified_header' %>
 | 
				
			||||||
 | 
					<div class="site-content">
 | 
				
			||||||
 | 
					  <%= yield %>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<%= render 'layouts/apified_footer' %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										25
									
								
								app/views/static/terms_and_privacy.html.erb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								app/views/static/terms_and_privacy.html.erb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					<div class="container"><h1>Terms and Privacy</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<% if Settings.terms_and_privacy&.terms_url %>
 | 
				
			||||||
 | 
					  <h2><a href="<%= Settings.terms_and_privacy.terms_url  %>">Terms of Use</a></h2>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<% if Settings.terms_and_privacy&.privacy_url %>
 | 
				
			||||||
 | 
					  <h2><a href="<%= Settings.terms_and_privacy.terms_url  %>">Privacy Policy</a></h2>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h2>Software Licensing</h2>
 | 
				
			||||||
 | 
					This site uses software from the Houdini Project. In compliance with the requirements of the Houdini Project's licenses, you may access the source code corresponding to the current
 | 
				
			||||||
 | 
					version of this site <%= link_to "here", action: :ccs %>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<hr/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>The Houdini Project is released under a set of free and open source software licenses. The full details of
 | 
				
			||||||
 | 
					  what code is released under which license can be reviewed in source code in <a href="https://github.com/houdiniproject/houdini">the Houdini Project repository</a> and
 | 
				
			||||||
 | 
					  in its <a href="https://github.com/houdiniproject/houdini/blob/master/LICENSE">LICENSE</a> file.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>Please look above for any additional permissions or restrictions for this instance of the Houdini Project.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					@ -220,6 +220,21 @@ Config.schema do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # whether nonprofits must be vetted before they can use the service.
 | 
					  # whether nonprofits must be vetted before they can use the service.
 | 
				
			||||||
  optional(:nonprofits_must_be_vetted).filled(:bool?)
 | 
					  optional(:nonprofits_must_be_vetted).filled(:bool?)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  optional(:terms_and_privacy).schema do
 | 
				
			||||||
 | 
					    # the url to the terms of use of this Houdini Project instance
 | 
				
			||||||
 | 
					    optional(:terms_url).filled(:str?)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # the url to the privacy policy of this Houdini Project instance
 | 
				
			||||||
 | 
					    optional(:privacy_url).filled(:str?)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # complete, corresponding source
 | 
				
			||||||
 | 
					  optional(:ccs).schema do
 | 
				
			||||||
 | 
					    optional(:ccs_method).value(included_in?: %w(local_tar_gz github))
 | 
				
			||||||
 | 
					    optional(:options)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Settings.reload!
 | 
					Settings.reload!
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -163,7 +163,6 @@ en:
 | 
				
			||||||
        phone: "Your Phone (for account recovery)"
 | 
					        phone: "Your Phone (for account recovery)"
 | 
				
			||||||
      save_and_finish: "Save & Finish"
 | 
					      save_and_finish: "Save & Finish"
 | 
				
			||||||
      next: "Next"
 | 
					      next: "Next"
 | 
				
			||||||
 | 
					  footer:
 | 
				
			||||||
 | 
					    terms_and_privacy: "Terms & Privacy"
 | 
				
			||||||
 | 
					    about: "About"
 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -255,6 +255,9 @@ Commitchange::Application.routes.draw do
 | 
				
			||||||
  post '/webhooks/stripe_subscription_payment' => 'webhooks#subscription_payment'
 | 
					  post '/webhooks/stripe_subscription_payment' => 'webhooks#subscription_payment'
 | 
				
			||||||
  post '/webhooks/stripe' => 'webhooks#stripe'
 | 
					  post '/webhooks/stripe' => 'webhooks#stripe'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get '/static/terms_and_privacy' => 'static#terms_and_privacy'
 | 
				
			||||||
 | 
						get '/static/ccs' => 'static#ccs'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	root :to => 'front#index'
 | 
						root :to => 'front#index'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										45
									
								
								spec/controllers/static_controller_spec.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								spec/controllers/static_controller_spec.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RSpec.describe StaticController, :type => :controller do
 | 
				
			||||||
 | 
					  describe ".ccs" do
 | 
				
			||||||
 | 
					    around(:each) do |example|
 | 
				
			||||||
 | 
					      example.run
 | 
				
			||||||
 | 
					      Settings.reload!
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'local_tar_gz' do
 | 
				
			||||||
 | 
					      before (:each) do
 | 
				
			||||||
 | 
					        Settings.merge!(
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ccs: {
 | 
				
			||||||
 | 
					                    ccs_method: 'local_tar_gz',
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'fails on git archive' do
 | 
				
			||||||
 | 
					        expect(Kernel).to receive(:system).and_return(false)
 | 
				
			||||||
 | 
					        get('ccs')
 | 
				
			||||||
 | 
					        expect(response.status).to eq 500
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'setup github' do
 | 
				
			||||||
 | 
					      Settings.merge!(
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					              ccs: {
 | 
				
			||||||
 | 
					                  ccs_method: 'github',
 | 
				
			||||||
 | 
					                  options: {
 | 
				
			||||||
 | 
					                      account: 'account',
 | 
				
			||||||
 | 
					                      repo: 'repo'
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					      expect(File).to receive(:read).with("#{$RAILS_ROOT}/CCS_HASH").and_return("hash")
 | 
				
			||||||
 | 
					      get('ccs')
 | 
				
			||||||
 | 
					      expect(response).to redirect_to "https://github.com/account/repo/tree/hash"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue