disco_app 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/disco_app/install_controller.rb +1 -1
- data/app/jobs/disco_app/concerns/app_installed_job.rb +4 -4
- data/app/jobs/disco_app/concerns/render_asset_group_job.rb +8 -0
- data/app/jobs/disco_app/concerns/shop_update_job.rb +1 -1
- data/app/jobs/disco_app/concerns/subscription_changed_job.rb +1 -1
- data/app/jobs/disco_app/concerns/synchronise_carrier_service_job.rb +1 -1
- data/app/jobs/disco_app/concerns/synchronise_webhooks_job.rb +1 -1
- data/app/jobs/disco_app/render_asset_group_job.rb +3 -0
- data/app/jobs/disco_app/shop_job.rb +1 -1
- data/app/models/disco_app/concerns/renders_assets.rb +148 -0
- data/app/services/disco_app/subscription_service.rb +1 -1
- data/lib/disco_app/version.rb +1 -1
- data/lib/generators/disco_app/disco_app_generator.rb +1 -2
- data/lib/tasks/carrier_service.rake +1 -1
- data/lib/tasks/shops.rake +1 -1
- data/lib/tasks/webhooks.rake +1 -1
- data/test/dummy/app/jobs/products_create_job.rb +1 -1
- data/test/dummy/app/jobs/products_delete_job.rb +1 -1
- data/test/dummy/app/jobs/products_update_job.rb +1 -1
- data/test/dummy/app/models/js_configuration.rb +8 -0
- data/test/dummy/app/models/widget_configuration.rb +10 -0
- data/test/dummy/app/views/assets/script_tag.js.erb +1 -0
- data/test/dummy/app/views/assets/test.js.erb +1 -0
- data/test/dummy/app/views/assets/widget.js.erb +2 -0
- data/test/dummy/app/views/assets/widget.scss.erb +3 -0
- data/test/dummy/db/migrate/20160530160739_create_asset_models.rb +19 -0
- data/test/dummy/db/schema.rb +16 -1
- data/test/fixtures/api/widget_store/assets/create_script_tag_js_request.json +6 -0
- data/test/fixtures/api/widget_store/assets/create_script_tag_js_response.json +12 -0
- data/test/fixtures/api/widget_store/assets/create_script_tag_request.json +6 -0
- data/test/fixtures/api/widget_store/assets/create_script_tag_response.json +10 -0
- data/test/fixtures/api/widget_store/assets/create_test_js_request.json +6 -0
- data/test/fixtures/api/widget_store/assets/create_test_js_response.json +12 -0
- data/test/fixtures/api/widget_store/assets/create_widget_js_request.json +6 -0
- data/test/fixtures/api/widget_store/assets/create_widget_js_response.json +12 -0
- data/test/fixtures/api/widget_store/assets/create_widget_scss_request.json +6 -0
- data/test/fixtures/api/widget_store/assets/create_widget_scss_response.json +12 -0
- data/test/fixtures/api/widget_store/assets/get_script_tags_empty_request.json +1 -0
- data/test/fixtures/api/widget_store/assets/get_script_tags_empty_response.json +1 -0
- data/test/fixtures/api/widget_store/assets/get_script_tags_preexisting_request.json +1 -0
- data/test/fixtures/api/widget_store/assets/get_script_tags_preexisting_response.json +12 -0
- data/test/fixtures/api/widget_store/assets/update_script_tag_request.json +10 -0
- data/test/fixtures/api/widget_store/assets/update_script_tag_response.json +10 -0
- data/test/fixtures/assets/test.js +1 -0
- data/test/fixtures/js_configurations.yml +3 -0
- data/test/fixtures/widget_configurations.yml +4 -0
- data/test/jobs/disco_app/app_installed_job_test.rb +3 -3
- data/test/jobs/disco_app/app_uninstalled_job_test.rb +1 -1
- data/test/models/disco_app/renders_assets_test.rb +100 -0
- data/test/support/test_shopify_api.rb +1 -1
- metadata +72 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b67b4667e899a379d0cc4152f228bfe7a80bef4aa6b35c26f54ee76c20c967f
|
4
|
+
data.tar.gz: d421b6283198d07e8ddc9a902e71a13320745e84f8fd5b3dbc981e6e88b70062
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b713f8e47aefe3614a2016bad8046d91fdee669fa5635f3768d167d9c6768622af51ec5f6cb711040f7d712dc2cdac2e9f879f4d752956c008444de52ad326ec
|
7
|
+
data.tar.gz: df1e8549d1e7474f137bc7d6a483f7e06450f26273181bdb4724b79003d6a3f51e19b4b29c6d0736f2f390e9d2c8dcd922d5b7e1785717166e70f6e152b4ebdd
|
@@ -6,7 +6,7 @@ class DiscoApp::InstallController < ApplicationController
|
|
6
6
|
|
7
7
|
# Start the installation process for the current shop, then redirect to the installing screen.
|
8
8
|
def install
|
9
|
-
DiscoApp::AppInstalledJob.perform_later(@shop
|
9
|
+
DiscoApp::AppInstalledJob.perform_later(@shop, cookies[DiscoApp::CODE_COOKIE_KEY], cookies[DiscoApp::SOURCE_COOKIE_KEY])
|
10
10
|
redirect_to action: :installing
|
11
11
|
end
|
12
12
|
|
@@ -14,10 +14,10 @@ module DiscoApp::Concerns::AppInstalledJob
|
|
14
14
|
# - Perform initial update of shop information.
|
15
15
|
# - Subscribe to default plan, if any exists.
|
16
16
|
#
|
17
|
-
def perform(
|
18
|
-
DiscoApp::SynchroniseWebhooksJob.perform_now(
|
19
|
-
DiscoApp::SynchroniseCarrierServiceJob.perform_now(
|
20
|
-
DiscoApp::ShopUpdateJob.perform_now(
|
17
|
+
def perform(shop, plan_code = nil, source = nil)
|
18
|
+
DiscoApp::SynchroniseWebhooksJob.perform_now(@shop)
|
19
|
+
DiscoApp::SynchroniseCarrierServiceJob.perform_now(@shop)
|
20
|
+
DiscoApp::ShopUpdateJob.perform_now(@shop)
|
21
21
|
|
22
22
|
@shop.reload
|
23
23
|
|
@@ -2,7 +2,7 @@ module DiscoApp::Concerns::ShopUpdateJob
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
# Perform an update of the current shop's information.
|
5
|
-
def perform(
|
5
|
+
def perform(shop, shop_data = nil)
|
6
6
|
# If we weren't provided with shop data (eg from a webhook), fetch it.
|
7
7
|
shop_data ||= ActiveSupport::JSON::decode(ShopifyAPI::Shop.current.to_json)
|
8
8
|
|
@@ -2,7 +2,7 @@ module DiscoApp::Concerns::SynchroniseCarrierServiceJob
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
# Ensure that any carrier service required by our app is registered.
|
5
|
-
def perform(
|
5
|
+
def perform(shop)
|
6
6
|
# Don't proceed unless we have a name and callback url.
|
7
7
|
return unless carrier_service_name and callback_url
|
8
8
|
|
@@ -3,7 +3,7 @@ module DiscoApp::Concerns::SynchroniseWebhooksJob
|
|
3
3
|
|
4
4
|
# Ensure the webhooks registered with our shop are the same as those listed
|
5
5
|
# in our application configuration.
|
6
|
-
def perform(
|
6
|
+
def perform(shop)
|
7
7
|
# Get the full list of expected webhook topics.
|
8
8
|
expected_topics = [:'app/uninstalled', :'shop/update'] + topics
|
9
9
|
|
@@ -15,7 +15,7 @@ class DiscoApp::ShopJob < ActiveJob::Base
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def find_shop(job)
|
18
|
-
@shop ||= DiscoApp::Shop.find_by!(shopify_domain: job.arguments.first)
|
18
|
+
@shop ||= job.arguments.first.is_a?(DiscoApp::Shop) ? job.arguments.first : DiscoApp::Shop.find_by!(shopify_domain: job.arguments.first)
|
19
19
|
end
|
20
20
|
|
21
21
|
def shop_context(job, block)
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'render_anywhere'
|
2
|
+
|
3
|
+
module DiscoApp::Concerns::RendersAssets
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
include RenderAnywhere
|
8
|
+
after_commit :queue_render_asset_group_job
|
9
|
+
end
|
10
|
+
|
11
|
+
class_methods do
|
12
|
+
|
13
|
+
# Ruby "macro" that allows the definition of a number of Shopify assets that
|
14
|
+
# should be rendered and uploaded when certain attributes on the including
|
15
|
+
# class change. This assumes that the including class (1) is an ActiveRecord
|
16
|
+
# model that supports an `after_commit` callback; and (2) that the model has
|
17
|
+
# a `shop` method (or attribute) that references the DiscoApp::Shop instance
|
18
|
+
# associated with the current model.
|
19
|
+
#
|
20
|
+
# Options
|
21
|
+
#
|
22
|
+
# assets: Required. A list of asset templates to be rendered and
|
23
|
+
# uploaded to Shopify. The order of assets matters only
|
24
|
+
# in that subsequent asset templates will have access to
|
25
|
+
# the public CDN url of earlier-rendered assets through
|
26
|
+
# a "@public_urls" context variable.
|
27
|
+
#
|
28
|
+
# triggered_by: Optional. A list of attributes that should trigger the
|
29
|
+
# re-rendering and upload of the assets defined by the
|
30
|
+
# `assets` option, provided as a list of string. If
|
31
|
+
# empty or nil, nothing will be triggered.
|
32
|
+
#
|
33
|
+
# script_tags: Optional. A list of assets that should have script
|
34
|
+
# tags created or updated after being rendered to the
|
35
|
+
# storefront.
|
36
|
+
#
|
37
|
+
# compress: Optional. Whether Javascript and SCSS assets should be
|
38
|
+
# compressed after being rendered. Defaults to true in
|
39
|
+
# production environments, false otherwise.
|
40
|
+
#
|
41
|
+
def renders_assets(*asset_groups)
|
42
|
+
options = asset_groups.last.is_a?(Hash) ? asset_groups.pop : {}
|
43
|
+
options = renders_assets_default_options.merge(options)
|
44
|
+
|
45
|
+
# Ensure assets, triggered by and script tag options are arrays.
|
46
|
+
options[:assets] = options[:assets] ? Array(options[:assets]).map(&:to_sym) : []
|
47
|
+
options[:triggered_by] = options[:triggered_by] ? Array(options[:triggered_by]).map(&:to_s) : []
|
48
|
+
options[:script_tags] = options[:script_tags] ? Array(options[:script_tags]).map(&:to_sym) : []
|
49
|
+
|
50
|
+
asset_groups.each do |asset_group|
|
51
|
+
renderable_asset_groups[asset_group.to_sym] = options
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Return a list of renderable asset groups, along with their options.
|
56
|
+
def renderable_asset_groups
|
57
|
+
@renderable_asset_groups ||= {}
|
58
|
+
end
|
59
|
+
|
60
|
+
# Return the default options for the `renders_assets` macro.
|
61
|
+
def renders_assets_default_options
|
62
|
+
{
|
63
|
+
assets: nil,
|
64
|
+
triggered_by: nil,
|
65
|
+
compress: Rails.env.production?
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
# Callback, triggered after a model save. Iterates through each asset group
|
72
|
+
# defined on the model and queues a render job if any of the changed
|
73
|
+
# attributes are found in the asset group's triggered_by list.
|
74
|
+
def queue_render_asset_group_job
|
75
|
+
renderable_asset_groups.each do |asset_group, options|
|
76
|
+
unless (previous_changes.keys & options[:triggered_by]).empty?
|
77
|
+
DiscoApp::RenderAssetGroupJob.perform_later(shop, self, asset_group.to_s)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Copies the class-level hash of assets with symbol asset name as keys and
|
83
|
+
# their corresponding options as values to the instance.
|
84
|
+
def renderable_asset_groups
|
85
|
+
@renderable_asset_groups ||= self.class.renderable_asset_groups.dup
|
86
|
+
end
|
87
|
+
|
88
|
+
# Render the specified asset group and upload the result to Shopify.
|
89
|
+
def render_asset_group(asset_group)
|
90
|
+
options = renderable_asset_groups[asset_group]
|
91
|
+
public_urls = {}
|
92
|
+
|
93
|
+
options[:assets].each do |asset|
|
94
|
+
# Create/replace the asset via the Shopify API.
|
95
|
+
shopify_asset = shop.temp {
|
96
|
+
ShopifyAPI::Asset.create(
|
97
|
+
key: "assets/#{asset}",
|
98
|
+
value: render_asset_group_asset(asset, public_urls)
|
99
|
+
)
|
100
|
+
}
|
101
|
+
|
102
|
+
# Store the public URL to this asset, so that we're able to use it in
|
103
|
+
# subsequent template renders. Adds a .css suffix to .scss assets, so that
|
104
|
+
# we use the Shopify-compiled version of any SCSS stylesheets.
|
105
|
+
public_urls[asset] = shopify_asset.public_url.gsub(/\.scss\?/, '.scss.css?')
|
106
|
+
end
|
107
|
+
|
108
|
+
# If we specified the creation of any script tags based on newly rendered
|
109
|
+
# assets, do that now.
|
110
|
+
unless options[:script_tags].empty?
|
111
|
+
render_asset_script_tags(options, public_urls)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
# Render an individual asset within an asset group.
|
118
|
+
def render_asset_group_asset(asset, public_urls)
|
119
|
+
render_asset_renderer.render_to_string(
|
120
|
+
template: "assets/#{asset}",
|
121
|
+
layout: nil,
|
122
|
+
locals: {
|
123
|
+
:"@#{self.class.name.underscore}" => self,
|
124
|
+
:@public_urls => public_urls
|
125
|
+
}
|
126
|
+
)
|
127
|
+
end
|
128
|
+
|
129
|
+
def render_asset_renderer
|
130
|
+
@render_asset_renderer ||= self.class.const_get('RenderingController').new
|
131
|
+
end
|
132
|
+
|
133
|
+
# Render any script tags defined by the :script_tags options that we have
|
134
|
+
# a public URL for.
|
135
|
+
def render_asset_script_tags(options, public_urls)
|
136
|
+
# Fetch the current set of script tags for the store.
|
137
|
+
current_script_tags = shop.temp { ShopifyAPI::ScriptTag.find(:all) }
|
138
|
+
|
139
|
+
# Iterate each script tag for which we have a known public URL and create
|
140
|
+
# or update the corresponding script tag resource.
|
141
|
+
public_urls.slice(*options[:script_tags]).each do |asset, public_url|
|
142
|
+
script_tag = current_script_tags.find(lambda { ShopifyAPI::ScriptTag.new(event: 'onload') }) { |script_tag| script_tag.src.include?("#{asset}?") }
|
143
|
+
script_tag.src = public_url
|
144
|
+
shop.temp { script_tag.save }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
@@ -37,7 +37,7 @@ class DiscoApp::SubscriptionService
|
|
37
37
|
)
|
38
38
|
|
39
39
|
# Enqueue the subscription changed background job.
|
40
|
-
DiscoApp::SubscriptionChangedJob.perform_later(shop
|
40
|
+
DiscoApp::SubscriptionChangedJob.perform_later(shop, new_subscription)
|
41
41
|
|
42
42
|
# Return the new subscription.
|
43
43
|
new_subscription
|
data/lib/disco_app/version.rb
CHANGED
@@ -38,10 +38,9 @@ class DiscoAppGenerator < Rails::Generators::Base
|
|
38
38
|
gem 'react-rails', '~> 1.6.0'
|
39
39
|
gem 'classnames-rails', '~> 2.1.5'
|
40
40
|
gem 'active_link_to', '~> 1.0.2'
|
41
|
-
# Add premailer gem to Gemfile.
|
42
41
|
gem 'premailer-rails', '~> 1.8.2'
|
43
|
-
# Add explicit dependency on Nokogiri
|
44
42
|
gem 'nokogiri', '~> 1.6.7.2'
|
43
|
+
gem 'render_anywhere', '~> 0.0.12', require: false
|
45
44
|
|
46
45
|
# Add gems for development and testing only.
|
47
46
|
gem_group :development, :test do
|
@@ -3,7 +3,7 @@ namespace :carrier_service do
|
|
3
3
|
desc 'Synchronise carrier service across all installed shops.'
|
4
4
|
task sync: :environment do
|
5
5
|
DiscoApp::Shop.installed.has_active_shopify_plan.each do |shop|
|
6
|
-
DiscoApp::SynchroniseCarrierServiceJob.perform_later(shop
|
6
|
+
DiscoApp::SynchroniseCarrierServiceJob.perform_later(shop)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
data/lib/tasks/shops.rake
CHANGED
@@ -3,7 +3,7 @@ namespace :shops do
|
|
3
3
|
desc 'Synchronise shop data across all installed shops.'
|
4
4
|
task sync: :environment do
|
5
5
|
DiscoApp::Shop.installed.has_active_shopify_plan.each do |shop|
|
6
|
-
DiscoApp::ShopUpdateJob.perform_later(shop
|
6
|
+
DiscoApp::ShopUpdateJob.perform_later(shop)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
data/lib/tasks/webhooks.rake
CHANGED
@@ -3,7 +3,7 @@ namespace :webhooks do
|
|
3
3
|
desc 'Synchronise webhooks across all installed shops.'
|
4
4
|
task sync: :environment do
|
5
5
|
DiscoApp::Shop.installed.has_active_shopify_plan.each do |shop|
|
6
|
-
DiscoApp::SynchroniseWebhooksJob.perform_later(shop
|
6
|
+
DiscoApp::SynchroniseWebhooksJob.perform_later(shop)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class WidgetConfiguration < ActiveRecord::Base
|
2
|
+
include DiscoApp::Concerns::RendersAssets
|
3
|
+
|
4
|
+
belongs_to :shop, class_name: 'DiscoApp::Shop'
|
5
|
+
|
6
|
+
renders_assets :widget_assets, assets: ['widget.scss', 'widget.js'], triggered_by: ['locale', 'background_color']
|
7
|
+
renders_assets :liquid_assets, assets: 'widget.liquid', triggered_by: ['locale']
|
8
|
+
renders_assets :script_tag_assets, assets: 'script_tag.js', script_tags: 'script_tag.js'
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
(function() { console.log('Script Tag!') });
|
@@ -0,0 +1 @@
|
|
1
|
+
var locale = '<%= @js_configuration.locale %>';
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateAssetModels < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :js_configurations do |t|
|
4
|
+
t.integer :shop_id, limit: 8
|
5
|
+
t.string :label, default: 'Default'
|
6
|
+
t.string :locale, default: 'en'
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :widget_configurations do |t|
|
10
|
+
t.integer :shop_id, limit: 8
|
11
|
+
t.string :label, default: 'Default'
|
12
|
+
t.string :locale, default: 'en'
|
13
|
+
t.string :background_color, default: '#FFFFFF'
|
14
|
+
end
|
15
|
+
|
16
|
+
add_foreign_key :js_configurations, :disco_app_shops, column: :shop_id
|
17
|
+
add_foreign_key :widget_configurations, :disco_app_shops, column: :shop_id
|
18
|
+
end
|
19
|
+
end
|
data/test/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
14
|
+
ActiveRecord::Schema.define(version: 20160530160739) do
|
15
15
|
|
16
16
|
# These are extensions that must be enabled in order to support this database
|
17
17
|
enable_extension "plpgsql"
|
@@ -108,6 +108,12 @@ ActiveRecord::Schema.define(version: 20160521135510) do
|
|
108
108
|
add_index "disco_app_subscriptions", ["plan_id"], name: "index_disco_app_subscriptions_on_plan_id", using: :btree
|
109
109
|
add_index "disco_app_subscriptions", ["shop_id"], name: "index_disco_app_subscriptions_on_shop_id", using: :btree
|
110
110
|
|
111
|
+
create_table "js_configurations", force: :cascade do |t|
|
112
|
+
t.integer "shop_id", limit: 8
|
113
|
+
t.string "label", default: "Default"
|
114
|
+
t.string "locale", default: "en"
|
115
|
+
end
|
116
|
+
|
111
117
|
create_table "products", force: :cascade do |t|
|
112
118
|
t.integer "shop_id", limit: 8
|
113
119
|
t.jsonb "data"
|
@@ -115,6 +121,13 @@ ActiveRecord::Schema.define(version: 20160521135510) do
|
|
115
121
|
t.datetime "updated_at", null: false
|
116
122
|
end
|
117
123
|
|
124
|
+
create_table "widget_configurations", force: :cascade do |t|
|
125
|
+
t.integer "shop_id", limit: 8
|
126
|
+
t.string "label", default: "Default"
|
127
|
+
t.string "locale", default: "en"
|
128
|
+
t.string "background_color", default: "#FFFFFF"
|
129
|
+
end
|
130
|
+
|
118
131
|
add_foreign_key "disco_app_application_charges", "disco_app_shops", column: "shop_id"
|
119
132
|
add_foreign_key "disco_app_application_charges", "disco_app_subscriptions", column: "subscription_id"
|
120
133
|
add_foreign_key "disco_app_plan_codes", "disco_app_plans", column: "plan_id"
|
@@ -122,5 +135,7 @@ ActiveRecord::Schema.define(version: 20160521135510) do
|
|
122
135
|
add_foreign_key "disco_app_recurring_application_charges", "disco_app_subscriptions", column: "subscription_id"
|
123
136
|
add_foreign_key "disco_app_sessions", "disco_app_shops", column: "shop_id", on_delete: :cascade
|
124
137
|
add_foreign_key "disco_app_subscriptions", "disco_app_plan_codes", column: "plan_code_id"
|
138
|
+
add_foreign_key "js_configurations", "disco_app_shops", column: "shop_id"
|
125
139
|
add_foreign_key "products", "disco_app_shops", column: "shop_id"
|
140
|
+
add_foreign_key "widget_configurations", "disco_app_shops", column: "shop_id"
|
126
141
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"asset": {
|
3
|
+
"key": "assets/script_tag.js",
|
4
|
+
"public_url": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/script_tag.js?8557426387360348643",
|
5
|
+
"created_at": "2016-05-31T10:58:51-04:00",
|
6
|
+
"updated_at": "2016-05-31T10:58:51-04:00",
|
7
|
+
"content_type": "application/javascript",
|
8
|
+
"size": 45,
|
9
|
+
"theme_id": 106913286,
|
10
|
+
"warnings": []
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"script_tag": {
|
3
|
+
"id": 38138886,
|
4
|
+
"src": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/script_tag.js?8557426387360348643",
|
5
|
+
"event": "onload",
|
6
|
+
"created_at": "2016-05-31T11:09:17-04:00",
|
7
|
+
"updated_at": "2016-05-31T11:09:17-04:00",
|
8
|
+
"display_scope": "all"
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"asset": {
|
3
|
+
"key": "assets/test.js",
|
4
|
+
"public_url": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/test.js?8565972447222863489",
|
5
|
+
"created_at": "2016-05-31T08:22:07-04:00",
|
6
|
+
"updated_at": "2016-05-31T08:22:07-04:00",
|
7
|
+
"content_type": "application/javascript",
|
8
|
+
"size": 19,
|
9
|
+
"theme_id": 106913286,
|
10
|
+
"warnings": []
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"asset": {
|
3
|
+
"key": "assets/widget.js",
|
4
|
+
"public_url": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/widget.js?14127703044459766029",
|
5
|
+
"created_at": "2016-05-31T10:15:25-04:00",
|
6
|
+
"updated_at": "2016-05-31T10:15:25-04:00",
|
7
|
+
"content_type": "application/javascript",
|
8
|
+
"size": 123,
|
9
|
+
"theme_id": 106913286,
|
10
|
+
"warnings": []
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"asset": {
|
3
|
+
"key": "assets/widget.scss",
|
4
|
+
"public_url": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/widget.scss?12368054146898033463",
|
5
|
+
"created_at": "2016-05-31T08:40:24-04:00",
|
6
|
+
"updated_at": "2016-05-31T08:40:24-04:00",
|
7
|
+
"content_type": "text/css",
|
8
|
+
"size": 41,
|
9
|
+
"theme_id": 106913286,
|
10
|
+
"warnings": []
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{}
|
@@ -0,0 +1 @@
|
|
1
|
+
[]
|
@@ -0,0 +1 @@
|
|
1
|
+
{}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"script_tags": [
|
3
|
+
{
|
4
|
+
"id": 38138886,
|
5
|
+
"src": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/script_tag.js?8557426387360348000",
|
6
|
+
"event": "onload",
|
7
|
+
"created_at": "2016-05-31T11:09:17-04:00",
|
8
|
+
"updated_at": "2016-05-31T11:09:17-04:00",
|
9
|
+
"display_scope": "all"
|
10
|
+
}
|
11
|
+
]
|
12
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"script_tag":{
|
3
|
+
"id":38138886,
|
4
|
+
"src":"https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/script_tag.js?8557426387360348643",
|
5
|
+
"event":"onload",
|
6
|
+
"created_at":"2016-05-31T11:09:17-04:00",
|
7
|
+
"updated_at":"2016-05-31T11:09:17-04:00",
|
8
|
+
"display_scope":"all"
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"script_tag": {
|
3
|
+
"id": 38138886,
|
4
|
+
"src": "https://cdn.shopify.com/s/files/1/1308/2083/t/1/assets/script_tag.js?8557426387360348643",
|
5
|
+
"event": "onload",
|
6
|
+
"created_at": "2016-05-31T11:09:17-04:00",
|
7
|
+
"updated_at": "2016-05-31T11:09:17-04:00",
|
8
|
+
"display_scope": "all"
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
var locale = 'sv';
|
@@ -20,7 +20,7 @@ class DiscoApp::AppInstalledJobTest < ActionController::TestCase
|
|
20
20
|
test 'app installed job performs shop update job' do
|
21
21
|
# Assert the main install job can be enqueued and performed.
|
22
22
|
perform_enqueued_jobs do
|
23
|
-
DiscoApp::AppInstalledJob.perform_later(@shop
|
23
|
+
DiscoApp::AppInstalledJob.perform_later(@shop)
|
24
24
|
end
|
25
25
|
|
26
26
|
# Assert the update shop job was performed.
|
@@ -32,7 +32,7 @@ class DiscoApp::AppInstalledJobTest < ActionController::TestCase
|
|
32
32
|
@shop.current_subscription.destroy
|
33
33
|
|
34
34
|
perform_enqueued_jobs do
|
35
|
-
DiscoApp::AppInstalledJob.perform_later(@shop
|
35
|
+
DiscoApp::AppInstalledJob.perform_later(@shop)
|
36
36
|
end
|
37
37
|
|
38
38
|
# Assert the shop was subscribed to the development plan.
|
@@ -43,7 +43,7 @@ class DiscoApp::AppInstalledJobTest < ActionController::TestCase
|
|
43
43
|
@shop.current_subscription.destroy
|
44
44
|
|
45
45
|
perform_enqueued_jobs do
|
46
|
-
DiscoApp::AppInstalledJob.perform_later(@shop
|
46
|
+
DiscoApp::AppInstalledJob.perform_later(@shop, 'PODCAST', 'smpodcast')
|
47
47
|
end
|
48
48
|
|
49
49
|
# Assert the shop was subscribed to the development plan.
|
@@ -7,7 +7,7 @@ class DiscoApp::AppUninstalledJobTest < ActionController::TestCase
|
|
7
7
|
@shop = disco_app_shops(:widget_store)
|
8
8
|
|
9
9
|
perform_enqueued_jobs do
|
10
|
-
DiscoApp::AppUninstalledJob.perform_later(@shop
|
10
|
+
DiscoApp::AppUninstalledJob.perform_later(@shop, {})
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DiscoApp::RendersAssetsTest < ActiveSupport::TestCase
|
4
|
+
include ActiveJob::TestHelper
|
5
|
+
include DiscoApp::Test::ShopifyAPI
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@shop = disco_app_shops(:widget_store)
|
9
|
+
@js_configuration = js_configurations(:js_swedish)
|
10
|
+
@widget_configuration = widget_configurations(:widget_swedish)
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@shop = nil
|
15
|
+
@js_configuration = nil
|
16
|
+
@widget_configuration = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# Test queueing behaviour.
|
21
|
+
##
|
22
|
+
|
23
|
+
test 'rendering of javascript asset group queued when locale changed' do
|
24
|
+
assert_enqueued_with(job: DiscoApp::RenderAssetGroupJob) do
|
25
|
+
@js_configuration.update(locale: :no)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
test 'rendering of javascript asset group not queued when label changed' do
|
30
|
+
assert_no_enqueued_jobs do
|
31
|
+
@js_configuration.update(label: 'Sample')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'rendering of widget asset group queued when locale changed' do
|
36
|
+
assert_enqueued_with(job: DiscoApp::RenderAssetGroupJob, args: [@widget_configuration.shop, @widget_configuration, 'widget_assets']) do
|
37
|
+
@widget_configuration.update(locale: :no)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'rendering of liquid asset group queued when locale changed' do
|
42
|
+
assert_enqueued_with(job: DiscoApp::RenderAssetGroupJob, args: [@widget_configuration.shop, @widget_configuration, 'liquid_assets']) do
|
43
|
+
@widget_configuration.update(locale: :no)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'rendering of widget asset group queued when background color changed' do
|
48
|
+
assert_enqueued_with(job: DiscoApp::RenderAssetGroupJob, args: [@widget_configuration.shop, @widget_configuration, 'widget_assets']) do
|
49
|
+
@widget_configuration.update(background_color: '#FF0000')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
test 'rendering of liquid asset group not queued when background color changed' do
|
54
|
+
assert_enqueued_jobs 1 do
|
55
|
+
@widget_configuration.update(background_color: '#FF0000')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Test rendering behaviour.
|
61
|
+
##
|
62
|
+
|
63
|
+
test 'individual js asset renders correctly' do
|
64
|
+
assert_equal asset_fixture('test.js'), @js_configuration.send('render_asset_group_asset', 'test.js', {})
|
65
|
+
end
|
66
|
+
|
67
|
+
test 'js asset group renders and uploads to shopify' do
|
68
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_test_js')
|
69
|
+
@js_configuration.render_asset_group(:js_assets)
|
70
|
+
end
|
71
|
+
|
72
|
+
test 'widget asset group renders and uploads to shopify' do
|
73
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_widget_scss')
|
74
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_widget_js')
|
75
|
+
@widget_configuration.render_asset_group(:widget_assets)
|
76
|
+
end
|
77
|
+
|
78
|
+
test 'script tag asset group renders, uploads to shopify and creates new script tag' do
|
79
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_script_tag_js')
|
80
|
+
stub_api_request(:get, "#{@shop.admin_url}/script_tags.json", 'widget_store/assets/get_script_tags_empty')
|
81
|
+
stub_api_request(:post, "#{@shop.admin_url}/script_tags.json", 'widget_store/assets/create_script_tag')
|
82
|
+
@widget_configuration.render_asset_group(:script_tag_assets)
|
83
|
+
end
|
84
|
+
|
85
|
+
test 'script tag asset group renders, uploads to shopify and updates existing script tag' do
|
86
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_script_tag_js')
|
87
|
+
stub_api_request(:get, "#{@shop.admin_url}/script_tags.json", 'widget_store/assets/get_script_tags_preexisting')
|
88
|
+
stub_api_request(:put, "#{@shop.admin_url}/script_tags/38138886.json", 'widget_store/assets/update_script_tag')
|
89
|
+
@widget_configuration.render_asset_group(:script_tag_assets)
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
# Return an asset fixture as a string.
|
95
|
+
def asset_fixture(path)
|
96
|
+
filename = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'fixtures', 'assets', "#{path}")
|
97
|
+
File.read(filename)
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -5,7 +5,7 @@ module DiscoApp::Test
|
|
5
5
|
if method == :get
|
6
6
|
stub_request(method, endpoint)
|
7
7
|
.to_return(status: 200, body: api_fixture("#{fixture_name}_response").to_json)
|
8
|
-
elsif method == :post
|
8
|
+
elsif method == :post or method == :put
|
9
9
|
stub_request(method, endpoint)
|
10
10
|
.with(body: api_fixture("#{fixture_name}_request").to_json)
|
11
11
|
.to_return(status: 201, body: api_fixture("#{fixture_name}_response").to_json)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: disco_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Ballard
|
@@ -220,6 +220,20 @@ dependencies:
|
|
220
220
|
- - "~>"
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: 2.1.5
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: render_anywhere
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: 0.0.12
|
230
|
+
type: :runtime
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: 0.0.12
|
223
237
|
- !ruby/object:Gem::Dependency
|
224
238
|
name: sqlite3
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -389,10 +403,12 @@ files:
|
|
389
403
|
- app/jobs/disco_app/app_uninstalled_job.rb
|
390
404
|
- app/jobs/disco_app/concerns/app_installed_job.rb
|
391
405
|
- app/jobs/disco_app/concerns/app_uninstalled_job.rb
|
406
|
+
- app/jobs/disco_app/concerns/render_asset_group_job.rb
|
392
407
|
- app/jobs/disco_app/concerns/shop_update_job.rb
|
393
408
|
- app/jobs/disco_app/concerns/subscription_changed_job.rb
|
394
409
|
- app/jobs/disco_app/concerns/synchronise_carrier_service_job.rb
|
395
410
|
- app/jobs/disco_app/concerns/synchronise_webhooks_job.rb
|
411
|
+
- app/jobs/disco_app/render_asset_group_job.rb
|
396
412
|
- app/jobs/disco_app/shop_job.rb
|
397
413
|
- app/jobs/disco_app/shop_update_job.rb
|
398
414
|
- app/jobs/disco_app/subscription_changed_job.rb
|
@@ -403,6 +419,7 @@ files:
|
|
403
419
|
- app/models/disco_app/concerns/app_settings.rb
|
404
420
|
- app/models/disco_app/concerns/plan.rb
|
405
421
|
- app/models/disco_app/concerns/plan_code.rb
|
422
|
+
- app/models/disco_app/concerns/renders_assets.rb
|
406
423
|
- app/models/disco_app/concerns/shop.rb
|
407
424
|
- app/models/disco_app/concerns/subscription.rb
|
408
425
|
- app/models/disco_app/concerns/synchronises.rb
|
@@ -522,7 +539,13 @@ files:
|
|
522
539
|
- test/dummy/app/jobs/products_delete_job.rb
|
523
540
|
- test/dummy/app/jobs/products_update_job.rb
|
524
541
|
- test/dummy/app/models/disco_app/shop.rb
|
542
|
+
- test/dummy/app/models/js_configuration.rb
|
525
543
|
- test/dummy/app/models/product.rb
|
544
|
+
- test/dummy/app/models/widget_configuration.rb
|
545
|
+
- test/dummy/app/views/assets/script_tag.js.erb
|
546
|
+
- test/dummy/app/views/assets/test.js.erb
|
547
|
+
- test/dummy/app/views/assets/widget.js.erb
|
548
|
+
- test/dummy/app/views/assets/widget.scss.erb
|
526
549
|
- test/dummy/app/views/home/index.html.erb
|
527
550
|
- test/dummy/bin/bundle
|
528
551
|
- test/dummy/bin/rails
|
@@ -554,11 +577,28 @@ files:
|
|
554
577
|
- test/dummy/config/routes.rb
|
555
578
|
- test/dummy/config/secrets.yml
|
556
579
|
- test/dummy/db/migrate/20160307182229_create_products.rb
|
580
|
+
- test/dummy/db/migrate/20160530160739_create_asset_models.rb
|
557
581
|
- test/dummy/db/schema.rb
|
558
582
|
- test/dummy/public/404.html
|
559
583
|
- test/dummy/public/422.html
|
560
584
|
- test/dummy/public/500.html
|
561
585
|
- test/dummy/public/favicon.ico
|
586
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_js_request.json
|
587
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_js_response.json
|
588
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_request.json
|
589
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_response.json
|
590
|
+
- test/fixtures/api/widget_store/assets/create_test_js_request.json
|
591
|
+
- test/fixtures/api/widget_store/assets/create_test_js_response.json
|
592
|
+
- test/fixtures/api/widget_store/assets/create_widget_js_request.json
|
593
|
+
- test/fixtures/api/widget_store/assets/create_widget_js_response.json
|
594
|
+
- test/fixtures/api/widget_store/assets/create_widget_scss_request.json
|
595
|
+
- test/fixtures/api/widget_store/assets/create_widget_scss_response.json
|
596
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_empty_request.json
|
597
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_empty_response.json
|
598
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_preexisting_request.json
|
599
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_preexisting_response.json
|
600
|
+
- test/fixtures/api/widget_store/assets/update_script_tag_request.json
|
601
|
+
- test/fixtures/api/widget_store/assets/update_script_tag_response.json
|
562
602
|
- test/fixtures/api/widget_store/charges/activate_application_charge_request.json
|
563
603
|
- test/fixtures/api/widget_store/charges/activate_application_charge_response.json
|
564
604
|
- test/fixtures/api/widget_store/charges/activate_recurring_application_charge_request.json
|
@@ -577,21 +617,25 @@ files:
|
|
577
617
|
- test/fixtures/api/widget_store/charges/get_pending_recurring_application_charge_response.json
|
578
618
|
- test/fixtures/api/widget_store/shop.json
|
579
619
|
- test/fixtures/api/widget_store/webhooks.json
|
620
|
+
- test/fixtures/assets/test.js
|
580
621
|
- test/fixtures/disco_app/application_charges.yml
|
581
622
|
- test/fixtures/disco_app/plan_codes.yml
|
582
623
|
- test/fixtures/disco_app/plans.yml
|
583
624
|
- test/fixtures/disco_app/recurring_application_charges.yml
|
584
625
|
- test/fixtures/disco_app/shops.yml
|
585
626
|
- test/fixtures/disco_app/subscriptions.yml
|
627
|
+
- test/fixtures/js_configurations.yml
|
586
628
|
- test/fixtures/products.yml
|
587
629
|
- test/fixtures/webhooks/app_uninstalled.json
|
588
630
|
- test/fixtures/webhooks/product_created.json
|
589
631
|
- test/fixtures/webhooks/product_deleted.json
|
590
632
|
- test/fixtures/webhooks/product_updated.json
|
633
|
+
- test/fixtures/widget_configurations.yml
|
591
634
|
- test/integration/synchronises_test.rb
|
592
635
|
- test/jobs/disco_app/app_installed_job_test.rb
|
593
636
|
- test/jobs/disco_app/app_uninstalled_job_test.rb
|
594
637
|
- test/models/disco_app/plan_test.rb
|
638
|
+
- test/models/disco_app/renders_assets_test.rb
|
595
639
|
- test/models/disco_app/session_test.rb
|
596
640
|
- test/models/disco_app/shop_test.rb
|
597
641
|
- test/models/disco_app/subscription_test.rb
|
@@ -649,7 +693,14 @@ test_files:
|
|
649
693
|
- test/dummy/app/helpers/application_helper.rb
|
650
694
|
- test/dummy/app/models/disco_app/shop.rb
|
651
695
|
- test/dummy/app/models/product.rb
|
696
|
+
- test/dummy/app/models/widget_configuration.rb
|
697
|
+
- test/dummy/app/models/js_configuration.rb
|
698
|
+
- test/dummy/app/views/assets/script_tag.js.erb
|
699
|
+
- test/dummy/app/views/assets/widget.scss.erb
|
700
|
+
- test/dummy/app/views/assets/test.js.erb
|
701
|
+
- test/dummy/app/views/assets/widget.js.erb
|
652
702
|
- test/dummy/app/views/home/index.html.erb
|
703
|
+
- test/dummy/db/migrate/20160530160739_create_asset_models.rb
|
653
704
|
- test/dummy/db/migrate/20160307182229_create_products.rb
|
654
705
|
- test/dummy/db/schema.rb
|
655
706
|
- test/dummy/config/locales/en.yml
|
@@ -676,6 +727,22 @@ test_files:
|
|
676
727
|
- test/dummy/config/database.yml
|
677
728
|
- test/dummy/config/database.gitlab-ci.yml
|
678
729
|
- test/dummy/config/application.rb
|
730
|
+
- test/fixtures/api/widget_store/assets/create_test_js_response.json
|
731
|
+
- test/fixtures/api/widget_store/assets/create_widget_js_response.json
|
732
|
+
- test/fixtures/api/widget_store/assets/create_test_js_request.json
|
733
|
+
- test/fixtures/api/widget_store/assets/update_script_tag_request.json
|
734
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_response.json
|
735
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_js_response.json
|
736
|
+
- test/fixtures/api/widget_store/assets/create_widget_scss_request.json
|
737
|
+
- test/fixtures/api/widget_store/assets/update_script_tag_response.json
|
738
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_js_request.json
|
739
|
+
- test/fixtures/api/widget_store/assets/create_script_tag_request.json
|
740
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_preexisting_response.json
|
741
|
+
- test/fixtures/api/widget_store/assets/create_widget_scss_response.json
|
742
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_preexisting_request.json
|
743
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_empty_response.json
|
744
|
+
- test/fixtures/api/widget_store/assets/get_script_tags_empty_request.json
|
745
|
+
- test/fixtures/api/widget_store/assets/create_widget_js_request.json
|
679
746
|
- test/fixtures/api/widget_store/webhooks.json
|
680
747
|
- test/fixtures/api/widget_store/charges/create_application_charge_response.json
|
681
748
|
- test/fixtures/api/widget_store/charges/create_second_recurring_application_charge_response.json
|
@@ -694,6 +761,9 @@ test_files:
|
|
694
761
|
- test/fixtures/api/widget_store/charges/create_second_recurring_application_charge_request.json
|
695
762
|
- test/fixtures/api/widget_store/charges/activate_application_charge_request.json
|
696
763
|
- test/fixtures/api/widget_store/shop.json
|
764
|
+
- test/fixtures/assets/test.js
|
765
|
+
- test/fixtures/widget_configurations.yml
|
766
|
+
- test/fixtures/js_configurations.yml
|
697
767
|
- test/fixtures/disco_app/plan_codes.yml
|
698
768
|
- test/fixtures/disco_app/shops.yml
|
699
769
|
- test/fixtures/disco_app/application_charges.yml
|
@@ -723,5 +793,6 @@ test_files:
|
|
723
793
|
- test/models/disco_app/shop_test.rb
|
724
794
|
- test/models/disco_app/session_test.rb
|
725
795
|
- test/models/disco_app/subscription_test.rb
|
796
|
+
- test/models/disco_app/renders_assets_test.rb
|
726
797
|
- test/services/disco_app/charges_service_test.rb
|
727
798
|
- test/services/disco_app/subscription_service_test.rb
|