-
-
Save vicmaster/e81213fc53ad23b5306cbdae31c02923 to your computer and use it in GitHub Desktop.
shopify api integration testing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'spec_helper' | |
describe "home" do | |
before do | |
@domain = "myshop.myshopify.com" | |
@token = SecureRandom.hex(16) | |
@shopify_session = ShopifyAPI::Session.new(@domain, @token) | |
end | |
context "not logged in" do | |
it "should be at login" do | |
visit "/" | |
page.should have_content("Install this app in a shop to get access to its private admin data") | |
end | |
describe "sign in" do | |
before do | |
@shopify_session.should_receive(:valid?).and_return(true) | |
ShopifyAPI::Session.should_receive(:new).and_return(@shopify_session) | |
ShopifyAPI::Session.any_instance.should_receive(:create_permission_url).and_return("/login/finalize?shop=#{@domain}&t=#{@token}") | |
end | |
it "should contain content with 'Add new charity" do | |
visit "/" | |
fill_in "shop", with: @domain | |
click_button "Install" | |
page.should have_content("Add new charity") | |
end | |
end | |
end | |
context "logged in" do | |
before do | |
page.set_rack_session(:shopify => ShopifyAPI::Session.new(@domain, @token)) | |
end | |
it "should contain content with 'Add new charity" do | |
visit "/" | |
page.should have_content("Add new charity") | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class LoginController < ApplicationController | |
def index | |
# Ask user for their #{shop}.myshopify.com address | |
# If the #{shop}.myshopify.com address is already provided in the URL, just skip to #authenticate | |
if params[:shop].present? | |
redirect_to authenticate_path(:shop => params[:shop]) | |
end | |
end | |
def authenticate | |
@shopify_session = ShopifyAPI::Session.new(params[:shop].to_s.strip) | |
if params[:shop].present? | |
redirect_to @shopify_session.create_permission_url | |
else | |
redirect_to return_address | |
end | |
end | |
# Shopify redirects the logged-in user back to this action along with | |
# the authorization token t. | |
# | |
# This token is later combined with the developer's shared secret to form | |
# the password used to call API methods. | |
def finalize | |
Rails.logger.debug "Session finalize" | |
@shopify_session = ShopifyAPI::Session.new(params[:shop], params[:t], params) | |
if @shopify_session.valid? | |
session[:shopify] = @shopify_session | |
flash[:notice] = "Logged in to shopify store." | |
shop = Shop.find_or_create_by_url_and_api_url(url: @shopify_session.url, api_url: @shopify_session.site) | |
Rails.logger.debug "shop set" | |
session[:return_to] = nil | |
redirect_to root_url | |
else | |
Rails.logger.debug "Session invalid" | |
flash[:error] = "Could not log in to Shopify store." | |
redirect_to :action => 'index' | |
end | |
end | |
def logout | |
session[:shopify] = nil | |
flash[:notice] = "Successfully logged out." | |
redirect_to :action => 'index' | |
end | |
protected | |
def return_address | |
session[:return_to] || root_url | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file is copied to spec/ when you run 'rails generate rspec:install' | |
ENV["RAILS_ENV"] ||= 'test' | |
require File.expand_path("../../config/environment", __FILE__) | |
require 'rspec/rails' | |
require 'rspec/autorun' | |
require 'capybara/rails' | |
require 'capybara/dsl' | |
require "rack_session_access/capybara" | |
# Requires supporting ruby files with custom matchers and macros, etc, | |
# in spec/support/ and its subdirectories. | |
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} | |
Rails.application.config do | |
config.middleware.use RackSessionAccess::Middleware | |
end | |
RSpec.configure do |config| | |
# == Mock Framework | |
# | |
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: | |
# | |
# config.mock_with :mocha | |
# config.mock_with :flexmock | |
# config.mock_with :rr | |
config.mock_with :rspec | |
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures | |
config.fixture_path = "#{::Rails.root}/spec/factories" | |
# If you're not using ActiveRecord, or you'd prefer not to run each of your | |
# examples within a transaction, remove the following line or assign false | |
# instead of true. | |
config.use_transactional_fixtures = true | |
# If true, the base class of anonymous controllers will be inferred | |
# automatically. This will be the default behavior in future versions of | |
# rspec-rails. | |
config.infer_base_class_for_anonymous_controllers = false | |
# RSpec automatically cleans stuff out of backtraces; | |
# sometimes this is annoying when trying to debug something e.g. a gem | |
config.backtrace_clean_patterns = [ | |
/\/lib\d*\/ruby\//, | |
/bin\//, | |
/gems/, | |
/spec\/spec_helper\.rb/, | |
/lib\/rspec\/(core|expectations|matchers|mocks)/ | |
] | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://github.com/Shopify/shopify_app