shopify_app 5.0.2 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +4 -1
- data/.travis.yml +9 -0
- data/CHANGELOG +12 -1
- data/README.md +73 -108
- data/Rakefile +0 -1
- data/app/controllers/sessions_controller.rb +3 -0
- data/app/views/sessions/new.html.erb +17 -0
- data/config/routes.rb +10 -0
- data/lib/generators/shopify_app/controllers/controllers_generator.rb +29 -0
- data/lib/generators/shopify_app/install/install_generator.rb +83 -0
- data/lib/generators/shopify_app/install/templates/embedded_app.html.erb +22 -0
- data/lib/generators/shopify_app/install/templates/home_controller.rb +11 -0
- data/lib/generators/shopify_app/install/templates/index.html.erb +12 -0
- data/lib/generators/shopify_app/install/templates/omniauth.rb +2 -0
- data/lib/generators/shopify_app/install/templates/shopify_app.rb +6 -0
- data/lib/generators/shopify_app/install/templates/shopify_app_ready_script.html +8 -0
- data/lib/generators/shopify_app/install/templates/shopify_provider.rb +11 -0
- data/lib/generators/shopify_app/{templates/config/initializers → install/templates}/shopify_session_repository.rb +3 -3
- data/lib/generators/shopify_app/routes/routes_generator.rb +31 -0
- data/lib/generators/shopify_app/routes/templates/routes.rb +7 -0
- data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +42 -0
- data/lib/generators/shopify_app/shop_model/templates/db/migrate/create_shops.rb +15 -0
- data/lib/generators/shopify_app/shop_model/templates/session_storage.rb +16 -0
- data/lib/generators/shopify_app/shop_model/templates/shop.rb +3 -0
- data/lib/generators/shopify_app/shop_model/templates/shopify_session_repository.rb +7 -0
- data/lib/generators/shopify_app/shopify_app_generator.rb +10 -63
- data/lib/generators/shopify_app/views/views_generator.rb +29 -0
- data/lib/shopify_app.rb +14 -13
- data/lib/shopify_app/configuration.rb +26 -36
- data/lib/shopify_app/controller.rb +18 -0
- data/lib/shopify_app/engine.rb +5 -0
- data/lib/shopify_app/login_protection.rb +34 -32
- data/lib/shopify_app/sessions_controller.rb +64 -0
- data/lib/shopify_app/shop.rb +15 -0
- data/lib/shopify_app/shopify_session_repository.rb +23 -21
- data/lib/shopify_app/version.rb +1 -1
- data/shopify_app.gemspec +5 -10
- data/test/app_templates/app/controllers/application_controller.rb +2 -0
- data/test/app_templates/config/application.rb +24 -0
- data/test/app_templates/config/initializers/shopify_app.rb +6 -0
- data/test/app_templates/config/routes.rb +3 -0
- data/test/controllers/sessions_controller_test.rb +82 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/home_controller.rb +7 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/shopify_app.rb +6 -0
- data/test/dummy/config/routes.rb +10 -0
- data/test/dummy/config/secrets.yml +17 -0
- data/test/generators/install_generator_test.rb +103 -0
- data/test/generators/routes_generator_test.rb +33 -0
- data/test/generators/shop_model_generator_test.rb +40 -0
- data/test/generators/shopify_app_generator.rb +15 -0
- data/test/generators/views_generator_test.rb +15 -0
- data/test/shopify_app/configuration_test.rb +17 -0
- data/test/{lib/shopify_app → shopify_app}/in_memory_session_store_test.rb +6 -6
- data/test/{lib/shopify_app → shopify_app}/login_protection_test.rb +10 -7
- data/test/shopify_app/shopify_session_repository_test.rb +73 -0
- data/test/support/generator_test_helpers.rb +29 -0
- data/test/test_helper.rb +11 -3
- metadata +79 -61
- metadata.gz.sig +0 -0
- data/install.rb +0 -25
- data/lib/generators/shopify_app/README +0 -23
- data/lib/generators/shopify_app/USAGE +0 -22
- data/lib/generators/shopify_app/templates/app/assets/images/favicon.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/grid-18px.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify-114.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify-57.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify-72.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/javascripts/application.js +0 -15
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/application.css +0 -10
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/imports.css.less +0 -5
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/shopify_app.css.scss +0 -150
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/shopify_app_buttons.css.less +0 -77
- data/lib/generators/shopify_app/templates/app/controllers/application_controller.rb +0 -13
- data/lib/generators/shopify_app/templates/app/controllers/home_controller.rb +0 -18
- data/lib/generators/shopify_app/templates/app/controllers/sessions_controller.rb +0 -52
- data/lib/generators/shopify_app/templates/app/helpers/home_helper.rb +0 -9
- data/lib/generators/shopify_app/templates/app/helpers/login_helper.rb +0 -3
- data/lib/generators/shopify_app/templates/app/helpers/tabs_helper.rb +0 -11
- data/lib/generators/shopify_app/templates/app/views/home/design.html.erb +0 -3542
- data/lib/generators/shopify_app/templates/app/views/home/index.html.erb +0 -168
- data/lib/generators/shopify_app/templates/app/views/home/welcome.html.erb +0 -110
- data/lib/generators/shopify_app/templates/app/views/layouts/application.html.erb +0 -79
- data/lib/generators/shopify_app/templates/app/views/sessions/new.html.erb +0 -21
- data/lib/generators/shopify_app/templates/config/initializers/omniauth.rb +0 -14
- data/lib/generators/shopify_app/templates/config/initializers/rails_4_shim.rb +0 -1
- data/lib/generators/shopify_app/templates/public/404.html +0 -40
- data/lib/generators/shopify_app/templates/public/422.html +0 -40
- data/lib/generators/shopify_app/templates/public/500.html +0 -40
- data/lib/generators/shopify_app/templates/public/favicon.png +0 -0
- data/lib/generators/shopify_app/templates/public/shopify-114.png +0 -0
- data/lib/generators/shopify_app/templates/public/shopify-57.png +0 -0
- data/lib/generators/shopify_app/templates/public/shopify-72.png +0 -0
- data/lib/shopify_app/railtie.rb +0 -17
- data/test/config/development_config_file.yml +0 -8
- data/test/config/empty_config_file.yml +0 -1
- data/test/config/other_config_file.yml +0 -4
- data/test/config/shopify_app.yml +0 -4
- data/test/lib/shopify_app/configuration_test.rb +0 -91
- data/test/lib/shopify_app/shopify_session_repository_test.rb +0 -70
@@ -0,0 +1,25 @@
|
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3
|
3
|
+
#
|
4
|
+
# Ensure the SQLite 3 gem is defined in your Gemfile
|
5
|
+
# gem 'sqlite3'
|
6
|
+
#
|
7
|
+
default: &default
|
8
|
+
adapter: sqlite3
|
9
|
+
pool: 5
|
10
|
+
timeout: 5000
|
11
|
+
|
12
|
+
development:
|
13
|
+
<<: *default
|
14
|
+
database: db/development.sqlite3
|
15
|
+
|
16
|
+
# Warning: The database defined as "test" will be erased and
|
17
|
+
# re-generated from your development database when you run "rake".
|
18
|
+
# Do not set this db to the same as development or production.
|
19
|
+
test:
|
20
|
+
<<: *default
|
21
|
+
database: db/test.sqlite3
|
22
|
+
|
23
|
+
production:
|
24
|
+
<<: *default
|
25
|
+
database: db/production.sqlite3
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
3
|
+
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
8
|
+
config.cache_classes = true
|
9
|
+
|
10
|
+
# Do not eager load code on boot. This avoids loading your whole application
|
11
|
+
# just for the purpose of running a single test. If you are using a tool that
|
12
|
+
# preloads Rails for running tests, you may have to set it to true.
|
13
|
+
config.eager_load = false
|
14
|
+
|
15
|
+
# Configure static file server for tests with Cache-Control for performance.
|
16
|
+
config.serve_static_files = true
|
17
|
+
config.static_cache_control = 'public, max-age=3600'
|
18
|
+
|
19
|
+
# Show full error reports and disable caching.
|
20
|
+
config.consider_all_requests_local = true
|
21
|
+
config.action_controller.perform_caching = false
|
22
|
+
|
23
|
+
# Raise exceptions instead of rendering exception templates.
|
24
|
+
config.action_dispatch.show_exceptions = false
|
25
|
+
|
26
|
+
# Disable request forgery protection in test environment.
|
27
|
+
config.action_controller.allow_forgery_protection = false
|
28
|
+
|
29
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
30
|
+
# The :test delivery method accumulates sent emails in the
|
31
|
+
# ActionMailer::Base.deliveries array.
|
32
|
+
config.action_mailer.delivery_method = :test
|
33
|
+
|
34
|
+
# Randomize the order test cases are executed.
|
35
|
+
config.active_support.test_order = :random
|
36
|
+
|
37
|
+
# Print deprecation notices to the stderr.
|
38
|
+
config.active_support.deprecation = :stderr
|
39
|
+
|
40
|
+
# Raises error for missing translations
|
41
|
+
# config.action_view.raise_on_missing_translations = true
|
42
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
root to: 'home#index'
|
3
|
+
|
4
|
+
controller :sessions do
|
5
|
+
get 'login' => :new, :as => :login
|
6
|
+
post 'login' => :create, :as => :authenticate
|
7
|
+
get 'auth/shopify/callback' => :callback
|
8
|
+
get 'logout' => :destroy, :as => :logout
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key is used for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
|
6
|
+
# Make sure the secret is at least 30 characters and all random,
|
7
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
8
|
+
# You can use `rake secret` to generate a secure secret key.
|
9
|
+
|
10
|
+
# Make sure the secrets in this file are kept private
|
11
|
+
# if you're sharing your code publicly.
|
12
|
+
|
13
|
+
development:
|
14
|
+
secret_key_base: aa26a2ea3384f82ea5ae33b4d80fc49ea0cda260418cf65a9c54958d02c4eadfba56e9e26728ee6e339c7f00628f0451abd7f0b0b042f5695097ec8b86b4e135
|
15
|
+
|
16
|
+
test:
|
17
|
+
secret_key_base: ed1af7104003edfc9f3f55ff6eaa0bc0c4a70c240128ca9c33d2f19d3ac326f63944b40488ef87118b53174601ce488e1ae6075f7f6e18e7968755c6d9decefb
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/shopify_app/install/install_generator'
|
3
|
+
|
4
|
+
class InstallGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests ShopifyApp::Generators::InstallGenerator
|
6
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
7
|
+
|
8
|
+
setup do
|
9
|
+
prepare_destination
|
10
|
+
provide_existing_application_file
|
11
|
+
provide_existing_routes_file
|
12
|
+
provide_existing_application_controller
|
13
|
+
end
|
14
|
+
|
15
|
+
test "creates the ShopifyApp initializer" do
|
16
|
+
run_generator
|
17
|
+
assert_file "config/initializers/shopify_app.rb" do |shopify_app|
|
18
|
+
assert_match 'config.api_key = "<api_key>"', shopify_app
|
19
|
+
assert_match 'config.secret = "<secret>"', shopify_app
|
20
|
+
assert_match 'config.scope = "read_orders, read_products"', shopify_app
|
21
|
+
assert_match "config.embedded_app = true", shopify_app
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
test "creats and injects into omniauth initializer" do
|
26
|
+
run_generator
|
27
|
+
assert_file "config/initializers/omniauth.rb" do |omniauth|
|
28
|
+
assert_match "provider :shopify", omniauth
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
test "creates the default shopify_session_repository" do
|
33
|
+
run_generator
|
34
|
+
assert_file "config/initializers/shopify_session_repository.rb" do |file|
|
35
|
+
assert_match "ShopifyApp::SessionRepository.storage = InMemorySessionStore", file
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
test "adds the embedded app options to application.rb" do
|
40
|
+
run_generator
|
41
|
+
assert_file "config/application.rb" do |application|
|
42
|
+
assert_match "config.action_dispatch.default_headers.delete('X-Frame-Options')", application
|
43
|
+
assert_match "config.action_dispatch.default_headers['P3P'] = 'CP=\"Not used\"'", application
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
test "doesn't add embedd options if -embedded false" do
|
48
|
+
stub_embedded_false
|
49
|
+
run_generator
|
50
|
+
assert_file "config/application.rb" do |application|
|
51
|
+
refute_match "config.action_dispatch.default_headers.delete('X-Frame-Options')", application
|
52
|
+
refute_match "config.action_dispatch.default_headers['P3P'] = 'CP=\"Not used\"'", application
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
test "injects into application controller" do
|
57
|
+
run_generator
|
58
|
+
assert_file "app/controllers/application_controller.rb" do |controller|
|
59
|
+
assert_match " include ShopifyApp::Controller\n", controller
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
test "creates the embedded_app layout" do
|
64
|
+
run_generator
|
65
|
+
assert_file "app/views/layouts/embedded_app.html.erb"
|
66
|
+
end
|
67
|
+
|
68
|
+
test "creates the home controller" do
|
69
|
+
run_generator
|
70
|
+
assert_file "app/controllers/home_controller.rb"
|
71
|
+
end
|
72
|
+
|
73
|
+
test "creates the home index view with embedded options" do
|
74
|
+
run_generator
|
75
|
+
assert_file "app/views/home/index.html.erb" do |index|
|
76
|
+
assert_match "ShopifyApp.ready", index
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
test "creates the home index view with embedded false" do
|
81
|
+
stub_embedded_false
|
82
|
+
run_generator
|
83
|
+
assert_file "app/views/home/index.html.erb" do |index|
|
84
|
+
refute_match "ShopifyApp.ready", index
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
test "adds home route to routes" do
|
89
|
+
run_generator
|
90
|
+
assert_file "config/routes.rb" do |routes|
|
91
|
+
assert_match "root :to => 'home#index'", routes
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def stub_embedded_false
|
98
|
+
ShopifyApp::Generators::InstallGenerator.any_instance.stubs(:opts).returns(
|
99
|
+
{embedded: 'false'}
|
100
|
+
)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/shopify_app/routes/routes_generator'
|
3
|
+
|
4
|
+
class ControllerGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests ShopifyApp::Generators::RoutesGenerator
|
6
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
7
|
+
|
8
|
+
setup do
|
9
|
+
prepare_destination
|
10
|
+
provide_existing_routes_file
|
11
|
+
provide_existing_initializer_file
|
12
|
+
end
|
13
|
+
|
14
|
+
test "copies ShopifyApp routes to the host application" do
|
15
|
+
run_generator
|
16
|
+
|
17
|
+
assert_file "config/routes.rb" do |routes|
|
18
|
+
assert_match "get 'login' => :new, :as => :login", routes
|
19
|
+
assert_match "post 'login' => :create, :as => :authenticate", routes
|
20
|
+
assert_match "get 'auth/shopify/callback' => :callback", routes
|
21
|
+
assert_match "get 'logout' => :destroy, :as => :logout", routes
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
test "adds routes false to ShopifyApp initializer" do
|
26
|
+
run_generator
|
27
|
+
|
28
|
+
assert_file "config/initializers/shopify_app.rb" do |initializer|
|
29
|
+
assert_match "config.routes = false", initializer
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/shopify_app/shop_model/shop_model_generator'
|
3
|
+
|
4
|
+
class ShopModelGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests ShopifyApp::Generators::ShopModelGenerator
|
6
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
7
|
+
setup :prepare_destination
|
8
|
+
|
9
|
+
test "create the shop model" do
|
10
|
+
run_generator
|
11
|
+
assert_file "app/models/shop.rb" do |shop|
|
12
|
+
assert_match "class Shop < ActiveRecord::Base", shop
|
13
|
+
assert_match "include ShopifyApp::Shop", shop
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
test "creates ShopModel migration" do
|
18
|
+
run_generator
|
19
|
+
assert_migration "db/migrate/create_shops.rb" do |migration|
|
20
|
+
assert_match "create_table :shops do |t|", migration
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
test "adds the session_storage model" do
|
25
|
+
run_generator
|
26
|
+
assert_file "app/models/session_storage.rb" do |session_storage|
|
27
|
+
assert_match "class SessionStorage", session_storage
|
28
|
+
assert_match "def self.store(session)", session_storage
|
29
|
+
assert_match " def self.retrieve(id)", session_storage
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
test "adds the shopify_session_repository initializer" do
|
34
|
+
run_generator
|
35
|
+
assert_file "config/initializers/shopify_session_repository.rb" do |file|
|
36
|
+
assert_match "ShopifyApp::SessionRepository.storage = SessionStorage", file
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/shopify_app/shopify_app_generator'
|
3
|
+
|
4
|
+
class ViewsGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests ShopifyApp::Generators::ViewsGenerator
|
6
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
7
|
+
setup :prepare_destination
|
8
|
+
|
9
|
+
test "copies ShopifyApp views to the host application" do
|
10
|
+
run_generator
|
11
|
+
assert_directory "app/views"
|
12
|
+
assert_file "app/views/sessions/new.html.erb"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/shopify_app/views/views_generator'
|
3
|
+
|
4
|
+
class ViewsGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests ShopifyApp::Generators::ViewsGenerator
|
6
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
7
|
+
setup :prepare_destination
|
8
|
+
|
9
|
+
test "copies ShopifyApp views to the host application" do
|
10
|
+
run_generator
|
11
|
+
assert_directory "app/views"
|
12
|
+
assert_file "app/views/sessions/new.html.erb"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConfigurationTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test "configure" do
|
6
|
+
ShopifyApp.configure do |config|
|
7
|
+
config.embedded_app = true
|
8
|
+
end
|
9
|
+
|
10
|
+
assert_equal true, ShopifyApp.configuration.embedded_app
|
11
|
+
end
|
12
|
+
|
13
|
+
test "routes enabled" do
|
14
|
+
assert_equal true, ShopifyApp.configuration.routes_enabled?
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class InMemorySessionStoreTest <
|
4
|
-
|
3
|
+
class InMemorySessionStoreTest < ActiveSupport::TestCase
|
4
|
+
teardown do
|
5
5
|
InMemorySessionStore.clear
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
test "storing a session" do
|
9
9
|
uuid = InMemorySessionStore.store('something')
|
10
10
|
assert_equal 'something', InMemorySessionStore.repo[uuid]
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
test "retrieving a session" do
|
14
14
|
InMemorySessionStore.repo['abra'] = 'something'
|
15
15
|
assert_equal 'something', InMemorySessionStore.retrieve('abra')
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
test "clearing the store" do
|
19
19
|
uuid = InMemorySessionStore.store('data')
|
20
20
|
assert_equal 'data', InMemorySessionStore.retrieve(uuid)
|
21
21
|
InMemorySessionStore.clear
|
22
22
|
assert !InMemorySessionStore.retrieve(uuid), 'The sessions should have been removed'
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
test "it should raise when the environment is not valid" do
|
26
26
|
Rails.env.stubs(:production?).returns(true)
|
27
27
|
assert_raises InMemorySessionStore::EnvironmentError do
|
28
28
|
InMemorySessionStore.store('data')
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'action_controller'
|
3
|
+
require 'action_controller/base'
|
3
4
|
|
4
5
|
class LoginProtectionController < ActionController::Base
|
5
6
|
include ShopifyApp::LoginProtection
|
@@ -13,11 +14,11 @@ end
|
|
13
14
|
class LoginProtectionTest < ActionController::TestCase
|
14
15
|
tests LoginProtectionController
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
setup do
|
18
|
+
ShopifyApp::SessionRepository.storage = InMemorySessionStore
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
+
test "calling shop session returns nil when session is nil" do
|
21
22
|
with_application_test_routes do
|
22
23
|
session[:shopify] = nil
|
23
24
|
get :index
|
@@ -25,25 +26,27 @@ class LoginProtectionTest < ActionController::TestCase
|
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
+
test "calling shop session retreives session from storage" do
|
29
30
|
with_application_test_routes do
|
30
31
|
session[:shopify] = "foobar"
|
31
32
|
get :index
|
32
|
-
|
33
|
+
ShopifyApp::SessionRepository.expects(:retrieve).returns(session).once
|
33
34
|
assert @controller.shop_session
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
|
+
test "shop session is memoized and does not retreive session twice" do
|
38
39
|
with_application_test_routes do
|
39
40
|
session[:shopify] = "foobar"
|
40
41
|
get :index
|
41
|
-
|
42
|
+
ShopifyApp::SessionRepository.expects(:retrieve).returns(session).once
|
42
43
|
assert @controller.shop_session
|
43
44
|
assert @controller.shop_session
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
private
|
49
|
+
|
47
50
|
def with_application_test_routes
|
48
51
|
with_routing do |set|
|
49
52
|
set.draw do
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestSessionStore
|
4
|
+
attr_reader :storage
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@storage = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def retrieve(id)
|
11
|
+
storage[id]
|
12
|
+
end
|
13
|
+
|
14
|
+
def store(session)
|
15
|
+
id = storage.length
|
16
|
+
storage[id] = session
|
17
|
+
id
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class TestSessionStoreClass
|
22
|
+
def self.store(session)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.retrieve(id)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class ShopifySessionRepositoryTest < ActiveSupport::TestCase
|
30
|
+
attr_reader :session_store, :session
|
31
|
+
|
32
|
+
setup do
|
33
|
+
@session_store = TestSessionStore.new
|
34
|
+
@session = ShopifyAPI::Session.new('shop.myshopify.com', 'abracadabra')
|
35
|
+
ShopifyApp::SessionRepository.storage = session_store
|
36
|
+
end
|
37
|
+
|
38
|
+
teardown do
|
39
|
+
ShopifyApp::SessionRepository.storage = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
test "adding a session to the repository" do
|
43
|
+
assert_equal 0, ShopifyApp::SessionRepository.store(session)
|
44
|
+
assert_equal session, session_store.retrieve(0)
|
45
|
+
end
|
46
|
+
|
47
|
+
test "retrieving a session from the repository" do
|
48
|
+
session_store.storage[9] = session
|
49
|
+
assert_equal session, ShopifyApp::SessionRepository.retrieve(9)
|
50
|
+
end
|
51
|
+
|
52
|
+
test "retrieving a session for an id that does not exist" do
|
53
|
+
ShopifyApp::SessionRepository.store(session)
|
54
|
+
assert !ShopifyApp::SessionRepository.retrieve(100), "The session with id 100 should not exist in the Repository"
|
55
|
+
end
|
56
|
+
|
57
|
+
test "retrieving a session for a misconfigured shops repository" do
|
58
|
+
ShopifyApp::SessionRepository.storage = nil
|
59
|
+
assert_raises ShopifyApp::SessionRepository::ConfigurationError do
|
60
|
+
ShopifyApp::SessionRepository.retrieve(0)
|
61
|
+
end
|
62
|
+
|
63
|
+
assert_raises ShopifyApp::SessionRepository::ConfigurationError do
|
64
|
+
ShopifyApp::SessionRepository.store(session)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
test "accepts a string and constantizes it" do
|
69
|
+
ShopifyApp::SessionRepository.storage = 'TestSessionStoreClass'
|
70
|
+
assert_equal TestSessionStoreClass, ShopifyApp::SessionRepository.storage
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|