disco_app 0.10.5
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 +7 -0
- data/Rakefile +37 -0
- data/app/assets/images/disco_app/icon.svg +1 -0
- data/app/assets/images/disco_app/icons.svg +0 -0
- data/app/assets/javascripts/disco_app/components/custom/filterable_shop_list.js.jsx +61 -0
- data/app/assets/javascripts/disco_app/components/custom/inline-radio-options.es6.jsx +59 -0
- data/app/assets/javascripts/disco_app/components/custom/rules-editor.es6.jsx +432 -0
- data/app/assets/javascripts/disco_app/components/custom/shop_filter_query.js.jsx +13 -0
- data/app/assets/javascripts/disco_app/components/custom/shop_filter_tab.js.jsx +34 -0
- data/app/assets/javascripts/disco_app/components/custom/shop_filter_tabs.js.jsx +21 -0
- data/app/assets/javascripts/disco_app/components/custom/shop_list.js.jsx +142 -0
- data/app/assets/javascripts/disco_app/components/custom/shop_row.js.jsx +43 -0
- data/app/assets/javascripts/disco_app/components/custom/shopify_admin_link.js.jsx +29 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/cards/card-footer.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/cards/card-header.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/cards/card-section.es6.jsx +30 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/cards/card.es6.jsx +16 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/cards/cart-section-title.es6.jsx +17 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/base_form.es6.jsx +72 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/base_input.es6.jsx +20 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/button.es6.jsx +15 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-checkbox.es6.jsx +30 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-radio.es6.jsx +30 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-select.es6.jsx +45 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-text.es6.jsx +69 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-textarea.es6.jsx +48 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-time.es6.jsx +7 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/ui-form__element.es6.jsx +17 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/ui-form__group.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/forms/ui-form__section.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/icons/icon-chevron.es6.jsx +33 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/icons/next-icon.es6.jsx +18 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/input_select.es6.jsx +21 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/tables/table.es6.jsx +22 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-annotated-section.es6.jsx +29 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-empty-state.es6.jsx +35 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-footer-help.es6.jsx +13 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-layout-item.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-layout-section.es6.jsx +19 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-layout-sections.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-layout.es6.jsx +11 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-page-actions.es6.jsx +13 -0
- data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-page-actions__buttons.es6.jsx +27 -0
- data/app/assets/javascripts/disco_app/components.js +2 -0
- data/app/assets/javascripts/disco_app/disco_app.js +9 -0
- data/app/assets/javascripts/disco_app/frame.js +152 -0
- data/app/assets/javascripts/disco_app/shopify-turbolinks.js +7 -0
- data/app/assets/javascripts/disco_app/ui-kit.js +1 -0
- data/app/assets/stylesheets/disco_app/admin/_header.scss +75 -0
- data/app/assets/stylesheets/disco_app/admin/_layout.scss +32 -0
- data/app/assets/stylesheets/disco_app/admin/_nav.scss +184 -0
- data/app/assets/stylesheets/disco_app/admin.scss +11 -0
- data/app/assets/stylesheets/disco_app/disco_app.scss +21 -0
- data/app/assets/stylesheets/disco_app/frame/_buttons.scss +54 -0
- data/app/assets/stylesheets/disco_app/frame/_forms.scss +26 -0
- data/app/assets/stylesheets/disco_app/frame/_layout.scss +77 -0
- data/app/assets/stylesheets/disco_app/frame/_type.scss +25 -0
- data/app/assets/stylesheets/disco_app/frame.scss +10 -0
- data/app/assets/stylesheets/disco_app/mixins/_flexbox.scss +400 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-empty-state.scss +121 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-footer-help.scss +28 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-forms.scss +69 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-icons.scss +28 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-kit.scss +5116 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-layout.scss +15 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-page-actions.scss +23 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-stack.scss +39 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-tabs.scss +75 -0
- data/app/assets/stylesheets/disco_app/ui-kit/_ui-type.scss +13 -0
- data/app/controllers/disco_app/admin/app_settings_controller.rb +3 -0
- data/app/controllers/disco_app/admin/application_controller.rb +3 -0
- data/app/controllers/disco_app/admin/concerns/app_settings_controller.rb +24 -0
- data/app/controllers/disco_app/admin/concerns/authenticated_controller.rb +20 -0
- data/app/controllers/disco_app/admin/concerns/plans_controller.rb +54 -0
- data/app/controllers/disco_app/admin/concerns/shops_controller.rb +7 -0
- data/app/controllers/disco_app/admin/concerns/subscriptions_controller.rb +29 -0
- data/app/controllers/disco_app/admin/plans_controller.rb +3 -0
- data/app/controllers/disco_app/admin/resources/shops_controller.rb +3 -0
- data/app/controllers/disco_app/admin/shops_controller.rb +3 -0
- data/app/controllers/disco_app/admin/subscriptions_controller.rb +3 -0
- data/app/controllers/disco_app/charges_controller.rb +47 -0
- data/app/controllers/disco_app/concerns/app_proxy_controller.rb +40 -0
- data/app/controllers/disco_app/concerns/authenticated_controller.rb +56 -0
- data/app/controllers/disco_app/concerns/carrier_request_controller.rb +35 -0
- data/app/controllers/disco_app/frame_controller.rb +9 -0
- data/app/controllers/disco_app/install_controller.rb +27 -0
- data/app/controllers/disco_app/subscriptions_controller.rb +32 -0
- data/app/controllers/disco_app/webhooks_controller.rb +46 -0
- data/app/controllers/sessions_controller.rb +28 -0
- data/app/helpers/disco_app/application_helper.rb +50 -0
- data/app/jobs/disco_app/app_installed_job.rb +3 -0
- data/app/jobs/disco_app/app_uninstalled_job.rb +3 -0
- data/app/jobs/disco_app/concerns/app_installed_job.rb +39 -0
- data/app/jobs/disco_app/concerns/app_uninstalled_job.rb +20 -0
- data/app/jobs/disco_app/concerns/render_asset_group_job.rb +8 -0
- data/app/jobs/disco_app/concerns/shop_update_job.rb +13 -0
- data/app/jobs/disco_app/concerns/subscription_changed_job.rb +7 -0
- data/app/jobs/disco_app/concerns/synchronise_carrier_service_job.rb +55 -0
- data/app/jobs/disco_app/concerns/synchronise_resources_job.rb +12 -0
- data/app/jobs/disco_app/concerns/synchronise_webhooks_job.rb +52 -0
- data/app/jobs/disco_app/render_asset_group_job.rb +3 -0
- data/app/jobs/disco_app/shop_job.rb +27 -0
- data/app/jobs/disco_app/shop_update_job.rb +3 -0
- data/app/jobs/disco_app/subscription_changed_job.rb +3 -0
- data/app/jobs/disco_app/synchronise_carrier_service_job.rb +3 -0
- data/app/jobs/disco_app/synchronise_resources_job.rb +3 -0
- data/app/jobs/disco_app/synchronise_webhooks_job.rb +3 -0
- data/app/models/disco_app/app_settings.rb +3 -0
- data/app/models/disco_app/application_charge.rb +18 -0
- data/app/models/disco_app/concerns/app_settings.rb +7 -0
- data/app/models/disco_app/concerns/can_be_liquified.rb +45 -0
- data/app/models/disco_app/concerns/has_metafields.rb +48 -0
- data/app/models/disco_app/concerns/plan.rb +26 -0
- data/app/models/disco_app/concerns/plan_code.rb +15 -0
- data/app/models/disco_app/concerns/renders_assets.rb +166 -0
- data/app/models/disco_app/concerns/shop.rb +84 -0
- data/app/models/disco_app/concerns/subscription.rb +60 -0
- data/app/models/disco_app/concerns/synchronises.rb +58 -0
- data/app/models/disco_app/concerns/taggable.rb +16 -0
- data/app/models/disco_app/plan.rb +3 -0
- data/app/models/disco_app/plan_code.rb +3 -0
- data/app/models/disco_app/recurring_application_charge.rb +18 -0
- data/app/models/disco_app/session_storage.rb +18 -0
- data/app/models/disco_app/shop.rb +3 -0
- data/app/models/disco_app/subscription.rb +3 -0
- data/app/resources/disco_app/admin/resources/concerns/shop_resource.rb +100 -0
- data/app/resources/disco_app/admin/resources/shop_resource.rb +4 -0
- data/app/services/disco_app/carrier_request_service.rb +15 -0
- data/app/services/disco_app/charges_service.rb +81 -0
- data/app/services/disco_app/proxy_service.rb +17 -0
- data/app/services/disco_app/subscription_service.rb +46 -0
- data/app/services/disco_app/webhook_service.rb +30 -0
- data/app/views/disco_app/admin/app_settings/edit.html.erb +5 -0
- data/app/views/disco_app/admin/plans/_form.html.erb +72 -0
- data/app/views/disco_app/admin/plans/_plan_code_fields.html.erb +15 -0
- data/app/views/disco_app/admin/plans/edit.html.erb +7 -0
- data/app/views/disco_app/admin/plans/index.html.erb +43 -0
- data/app/views/disco_app/admin/plans/new.html.erb +7 -0
- data/app/views/disco_app/admin/shops/index.html.erb +13 -0
- data/app/views/disco_app/admin/subscriptions/edit.html.erb +33 -0
- data/app/views/disco_app/charges/activate.html.erb +1 -0
- data/app/views/disco_app/charges/create.html.erb +1 -0
- data/app/views/disco_app/charges/new.html.erb +23 -0
- data/app/views/disco_app/frame/frame.html.erb +36 -0
- data/app/views/disco_app/install/installing.html.erb +22 -0
- data/app/views/disco_app/install/uninstalling.html.erb +1 -0
- data/app/views/disco_app/proxy_errors/404.html.erb +1 -0
- data/app/views/disco_app/shared/_card.html.erb +14 -0
- data/app/views/disco_app/shared/_icons.html.erb +1 -0
- data/app/views/disco_app/shared/_section.html.erb +17 -0
- data/app/views/disco_app/subscriptions/new.html.erb +25 -0
- data/app/views/layouts/admin/_nav_items.erb +20 -0
- data/app/views/layouts/admin.html.erb +67 -0
- data/app/views/layouts/application.html.erb +18 -0
- data/app/views/layouts/embedded_app.html.erb +44 -0
- data/app/views/layouts/embedded_app_modal.html.erb +28 -0
- data/app/views/sessions/new.html.erb +28 -0
- data/config/routes.rb +63 -0
- data/db/migrate/20150525000000_create_shops_if_not_existent.rb +15 -0
- data/db/migrate/20150525162112_add_status_to_shops.rb +5 -0
- data/db/migrate/20150525171422_add_meta_to_shops.rb +11 -0
- data/db/migrate/20150629210346_add_charge_status_to_shop.rb +5 -0
- data/db/migrate/20150814214025_add_more_meta_to_shops.rb +15 -0
- data/db/migrate/20151017231302_create_disco_app_plans.rb +13 -0
- data/db/migrate/20151017232027_create_disco_app_subscriptions.rb +15 -0
- data/db/migrate/20151017234409_move_shop_to_disco_app_engine.rb +5 -0
- data/db/migrate/20160112233706_create_disco_app_sessions.rb +12 -0
- data/db/migrate/20160113194418_add_shop_id_to_disco_app_sessions.rb +6 -0
- data/db/migrate/20160223111044_create_disco_app_settings.rb +8 -0
- data/db/migrate/20160301223215_update_plans.rb +22 -0
- data/db/migrate/20160301224558_update_subscriptions.rb +13 -0
- data/db/migrate/20160302104816_create_disco_app_recurring_application_charges.rb +14 -0
- data/db/migrate/20160302105259_create_disco_app_application_charges.rb +14 -0
- data/db/migrate/20160302134728_drop_charge_status_from_shops.rb +5 -0
- data/db/migrate/20160302142941_add_shopify_attributes_to_charges.rb +8 -0
- data/db/migrate/20160331093148_create_disco_app_plan_codes.rb +14 -0
- data/db/migrate/20160401044420_add_status_to_plan_codes.rb +5 -0
- data/db/migrate/20160401045551_add_amount_and_plan_code_to_disco_app_subscriptions.rb +7 -0
- data/db/migrate/20160425205211_add_source_to_disco_app_subscriptions.rb +5 -0
- data/db/migrate/20160426033520_add_trial_period_days_to_disco_app_subscriptions.rb +5 -0
- data/db/migrate/20160513140727_add_name_to_disco_app_shops.rb +5 -0
- data/db/migrate/20160521135510_move_shop_to_synchronises.rb +61 -0
- data/lib/disco_app/configuration.rb +45 -0
- data/lib/disco_app/constants.rb +4 -0
- data/lib/disco_app/engine.rb +26 -0
- data/lib/disco_app/session.rb +14 -0
- data/lib/disco_app/support/file_fixtures.rb +23 -0
- data/lib/disco_app/test_help.rb +11 -0
- data/lib/disco_app/version.rb +3 -0
- data/lib/disco_app.rb +7 -0
- data/lib/generators/disco_app/USAGE +5 -0
- data/lib/generators/disco_app/disco_app_generator.rb +239 -0
- data/lib/generators/disco_app/templates/assets/javascripts/application.js +17 -0
- data/lib/generators/disco_app/templates/assets/javascripts/components.js +3 -0
- data/lib/generators/disco_app/templates/assets/stylesheets/application.scss +5 -0
- data/lib/generators/disco_app/templates/config/database.yml.tt +20 -0
- data/lib/generators/disco_app/templates/config/newrelic.yml +26 -0
- data/lib/generators/disco_app/templates/config/puma.rb +15 -0
- data/lib/generators/disco_app/templates/controllers/home_controller.rb +7 -0
- data/lib/generators/disco_app/templates/initializers/disco_app.rb +28 -0
- data/lib/generators/disco_app/templates/initializers/rollbar.rb +19 -0
- data/lib/generators/disco_app/templates/initializers/session_store.rb +2 -0
- data/lib/generators/disco_app/templates/initializers/shopify_app.rb +7 -0
- data/lib/generators/disco_app/templates/initializers/shopify_session_repository.rb +7 -0
- data/lib/generators/disco_app/templates/root/CHECKS +4 -0
- data/lib/generators/disco_app/templates/root/Procfile +2 -0
- data/lib/generators/disco_app/templates/views/home/index.html.erb +2 -0
- data/lib/tasks/carrier_service.rake +10 -0
- data/lib/tasks/database.rake +8 -0
- data/lib/tasks/sessions.rake +9 -0
- data/lib/tasks/shops.rake +10 -0
- data/lib/tasks/start.rake +3 -0
- data/lib/tasks/webhooks.rake +10 -0
- data/test/controllers/disco_app/admin/shops_controller_test.rb +54 -0
- data/test/controllers/disco_app/charges_controller_test.rb +99 -0
- data/test/controllers/disco_app/install_controller_test.rb +50 -0
- data/test/controllers/disco_app/subscriptions_controller_test.rb +68 -0
- data/test/controllers/disco_app/webhooks_controller_test.rb +58 -0
- data/test/controllers/home_controller_test.rb +92 -0
- data/test/controllers/proxy_controller_test.rb +42 -0
- data/test/disco_app_test.rb +7 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +17 -0
- data/test/dummy/app/assets/stylesheets/application.scss +5 -0
- data/test/dummy/app/controllers/application_controller.rb +6 -0
- data/test/dummy/app/controllers/carrier_request_controller.rb +10 -0
- data/test/dummy/app/controllers/disco_app/admin/shops_controller.rb +8 -0
- data/test/dummy/app/controllers/home_controller.rb +7 -0
- data/test/dummy/app/controllers/proxy_controller.rb +8 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/carts_update_job.rb +7 -0
- data/test/dummy/app/jobs/disco_app/app_installed_job.rb +16 -0
- data/test/dummy/app/jobs/disco_app/app_uninstalled_job.rb +11 -0
- data/test/dummy/app/jobs/products_create_job.rb +7 -0
- data/test/dummy/app/jobs/products_delete_job.rb +7 -0
- data/test/dummy/app/jobs/products_update_job.rb +7 -0
- data/test/dummy/app/models/cart.rb +24 -0
- data/test/dummy/app/models/disco_app/shop.rb +15 -0
- data/test/dummy/app/models/js_configuration.rb +8 -0
- data/test/dummy/app/models/product.rb +9 -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/app/views/home/index.html.erb +2 -0
- data/test/dummy/app/views/snippets/widget.liquid.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +38 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.codeship.yml +23 -0
- data/test/dummy/config/database.gitlab-ci.yml +24 -0
- data/test/dummy/config/database.yml +20 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +85 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/disco_app.rb +28 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/omniauth.rb +9 -0
- data/test/dummy/config/initializers/session_store.rb +2 -0
- data/test/dummy/config/initializers/shopify_app.rb +7 -0
- data/test/dummy/config/initializers/shopify_session_repository.rb +7 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +11 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20160307182229_create_products.rb +11 -0
- data/test/dummy/db/migrate/20160530160739_create_asset_models.rb +19 -0
- data/test/dummy/db/migrate/20161105054746_create_carts.rb +13 -0
- data/test/dummy/db/schema.rb +152 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- 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_liquid_request.json +6 -0
- data/test/fixtures/api/widget_store/assets/create_widget_liquid_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/api/widget_store/carrier_services.json +1 -0
- data/test/fixtures/api/widget_store/carrier_services_create.json +8 -0
- data/test/fixtures/api/widget_store/charges/activate_application_charge_request.json +16 -0
- data/test/fixtures/api/widget_store/charges/activate_application_charge_response.json +1 -0
- data/test/fixtures/api/widget_store/charges/activate_recurring_application_charge_request.json +20 -0
- data/test/fixtures/api/widget_store/charges/activate_recurring_application_charge_response.json +1 -0
- data/test/fixtures/api/widget_store/charges/create_application_charge_request.json +9 -0
- data/test/fixtures/api/widget_store/charges/create_application_charge_response.json +16 -0
- data/test/fixtures/api/widget_store/charges/create_recurring_application_charge_request.json +9 -0
- data/test/fixtures/api/widget_store/charges/create_recurring_application_charge_response.json +20 -0
- data/test/fixtures/api/widget_store/charges/create_second_recurring_application_charge_request.json +9 -0
- data/test/fixtures/api/widget_store/charges/create_second_recurring_application_charge_response.json +20 -0
- data/test/fixtures/api/widget_store/charges/get_accepted_application_charge_response.json +16 -0
- data/test/fixtures/api/widget_store/charges/get_accepted_recurring_application_charge_response.json +20 -0
- data/test/fixtures/api/widget_store/charges/get_declined_application_charge_response.json +16 -0
- data/test/fixtures/api/widget_store/charges/get_declined_recurring_application_charge_response.json +20 -0
- data/test/fixtures/api/widget_store/charges/get_pending_application_charge_response.json +16 -0
- data/test/fixtures/api/widget_store/charges/get_pending_recurring_application_charge_response.json +20 -0
- data/test/fixtures/api/widget_store/products/write_metafields_multiple_namespaces_request.json +31 -0
- data/test/fixtures/api/widget_store/products/write_metafields_multiple_namespaces_response.json +1 -0
- data/test/fixtures/api/widget_store/products/write_metafields_single_namespace_request.json +19 -0
- data/test/fixtures/api/widget_store/products/write_metafields_single_namespace_response.json +1 -0
- data/test/fixtures/api/widget_store/shop.json +46 -0
- data/test/fixtures/api/widget_store/webhooks.json +1 -0
- data/test/fixtures/assets/test.js +1 -0
- data/test/fixtures/assets/test.min.js +1 -0
- data/test/fixtures/carts.yml +5 -0
- data/test/fixtures/disco_app/application_charges.yml +11 -0
- data/test/fixtures/disco_app/plan_codes.yml +13 -0
- data/test/fixtures/disco_app/plans.yml +37 -0
- data/test/fixtures/disco_app/recurring_application_charges.yml +11 -0
- data/test/fixtures/disco_app/shops.yml +10 -0
- data/test/fixtures/disco_app/subscriptions.yml +22 -0
- data/test/fixtures/js_configurations.yml +3 -0
- data/test/fixtures/liquid/model.liquid +8 -0
- data/test/fixtures/products.yml +4 -0
- data/test/fixtures/webhooks/app_uninstalled.json +46 -0
- data/test/fixtures/webhooks/cart_updated.json +28 -0
- data/test/fixtures/webhooks/product_created.json +167 -0
- data/test/fixtures/webhooks/product_deleted.json +3 -0
- data/test/fixtures/webhooks/product_updated.json +167 -0
- data/test/fixtures/widget_configurations.yml +4 -0
- data/test/integration/synchronises_test.rb +62 -0
- data/test/jobs/disco_app/app_installed_job_test.rb +57 -0
- data/test/jobs/disco_app/app_uninstalled_job_test.rb +30 -0
- data/test/jobs/disco_app/synchronise_carrier_service_job_test.rb +25 -0
- data/test/jobs/disco_app/synchronise_webhooks_job_test.rb +30 -0
- data/test/models/disco_app/can_be_liquified_test.rb +55 -0
- data/test/models/disco_app/has_metafields_test.rb +40 -0
- data/test/models/disco_app/plan_test.rb +5 -0
- data/test/models/disco_app/renders_assets_test.rb +109 -0
- data/test/models/disco_app/session_test.rb +31 -0
- data/test/models/disco_app/shop_test.rb +43 -0
- data/test/models/disco_app/subscription_test.rb +19 -0
- data/test/services/disco_app/charges_service_test.rb +112 -0
- data/test/services/disco_app/subscription_service_test.rb +60 -0
- data/test/support/test_file_fixtures.rb +29 -0
- data/test/support/test_shopify_api.rb +16 -0
- data/test/test_helper.rb +55 -0
- metadata +888 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class SynchronisesTest < ActionDispatch::IntegrationTest
|
|
4
|
+
fixtures :all
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@shop = disco_app_shops(:widget_store)
|
|
8
|
+
@product = products(:ipod)
|
|
9
|
+
@routes = DiscoApp::Engine.routes
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def teardown
|
|
13
|
+
@shop = nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test 'new product is created when product created webhook is received' do
|
|
17
|
+
post_webhook('product_created', :'products/create')
|
|
18
|
+
|
|
19
|
+
# Assert the product was created locally, with the correct attributes.
|
|
20
|
+
product = Product.find(632910392)
|
|
21
|
+
assert_equal 'IPod Nano - 8GB', product.data['title']
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test 'existing product is updated when product updated webhook is received' do
|
|
25
|
+
assert_equal({}, @product.data)
|
|
26
|
+
|
|
27
|
+
post_webhook('product_updated', :'products/update')
|
|
28
|
+
|
|
29
|
+
# Assert the product was updated locally, with the correct attributes.
|
|
30
|
+
@product.reload
|
|
31
|
+
assert_equal 632910393, @product.id
|
|
32
|
+
assert_equal 'IPod Nano - 8GB', @product.data['title']
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test 'existing product is deleted when product deleted webhook is received' do
|
|
36
|
+
post_webhook('product_deleted', :'products/delete')
|
|
37
|
+
assert_equal 0, Product.count
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
test 'cart with token for id is updated when cart updated webhook is received' do
|
|
41
|
+
post_webhook('cart_updated', :'carts/update')
|
|
42
|
+
|
|
43
|
+
# Assert the cart data was correctly updated
|
|
44
|
+
assert_equal 3200.0, carts(:cart).total_price
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def webhooks_url
|
|
50
|
+
DiscoApp::Engine.routes.url_helpers.webhooks_url
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def post_webhook(fixture_name, webhook_topic)
|
|
54
|
+
body = webhook_fixture(fixture_name)
|
|
55
|
+
post(webhooks_url, body, {
|
|
56
|
+
HTTP_X_SHOPIFY_TOPIC: webhook_topic,
|
|
57
|
+
HTTP_X_SHOPIFY_SHOP_DOMAIN: @shop.shopify_domain,
|
|
58
|
+
HTTP_X_SHOPIFY_HMAC_SHA256: DiscoApp::WebhookService.calculated_hmac(body, ShopifyApp.configuration.secret)
|
|
59
|
+
})
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::AppInstalledJobTest < ActionController::TestCase
|
|
4
|
+
include ActiveJob::TestHelper
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@shop = disco_app_shops(:widget_store)
|
|
8
|
+
|
|
9
|
+
stub_request(:get, "#{@shop.admin_url}/webhooks.json").to_return(status: 200, body: api_fixture('widget_store/webhooks').to_json)
|
|
10
|
+
stub_request(:post, "#{@shop.admin_url}/webhooks.json").to_return(status: 200)
|
|
11
|
+
stub_request(:get, "#{@shop.admin_url}/shop.json").to_return(status: 200, body: api_fixture('widget_store/shop').to_json)
|
|
12
|
+
stub_request(:get, "#{@shop.admin_url}/carrier_services.json").to_return(status: 200, body: api_fixture('widget_store/carrier_services').to_json)
|
|
13
|
+
stub_request(:post, "#{@shop.admin_url}/carrier_services.json").to_return(status: 200)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def teardown
|
|
17
|
+
@shop = nil
|
|
18
|
+
|
|
19
|
+
WebMock.reset!
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test 'app installed job performs shop update job' do
|
|
23
|
+
# Assert the main install job can be enqueued and performed.
|
|
24
|
+
perform_enqueued_jobs do
|
|
25
|
+
DiscoApp::AppInstalledJob.perform_later(@shop)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Assert the update shop job was performed.
|
|
29
|
+
@shop.reload
|
|
30
|
+
assert_equal 'United States', @shop.data['country_name']
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test 'app installed job automatically subscribes stores to the correct default plan' do
|
|
34
|
+
@shop.current_subscription.destroy
|
|
35
|
+
|
|
36
|
+
perform_enqueued_jobs do
|
|
37
|
+
DiscoApp::AppInstalledJob.perform_later(@shop)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Assert the shop was subscribed to the development plan.
|
|
41
|
+
assert_equal disco_app_plans(:development), @shop.current_subscription.plan
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
test 'app installed job automatically subscribes stores to the correct default plan with a plan code and a source' do
|
|
45
|
+
@shop.current_subscription.destroy
|
|
46
|
+
|
|
47
|
+
perform_enqueued_jobs do
|
|
48
|
+
DiscoApp::AppInstalledJob.perform_later(@shop, 'PODCAST', 'smpodcast')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Assert the shop was subscribed to the development plan.
|
|
52
|
+
assert_equal disco_app_plans(:development), @shop.current_subscription.plan
|
|
53
|
+
assert_equal disco_app_plan_codes(:podcast_dev), @shop.current_subscription.plan_code
|
|
54
|
+
assert_equal 'smpodcast', @shop.current_subscription.source
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::AppUninstalledJobTest < ActionController::TestCase
|
|
4
|
+
include ActiveJob::TestHelper
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@shop = disco_app_shops(:widget_store)
|
|
8
|
+
|
|
9
|
+
perform_enqueued_jobs do
|
|
10
|
+
DiscoApp::AppUninstalledJob.perform_later(@shop, {})
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def teardown
|
|
15
|
+
@shop = nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test 'app uninstalled job changes shop status' do
|
|
19
|
+
assert_performed_jobs 1
|
|
20
|
+
@shop.reload
|
|
21
|
+
assert @shop.uninstalled?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test 'app uninstalled job can be extended using concerns' do
|
|
25
|
+
assert_performed_jobs 1
|
|
26
|
+
@shop.reload
|
|
27
|
+
assert_equal 'Nowhere', @shop.data['country_name'] # Assert extended method called.
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::SynchroniseCarrierServiceJobTest < ActionController::TestCase
|
|
4
|
+
include ActiveJob::TestHelper
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@shop = disco_app_shops(:widget_store)
|
|
8
|
+
|
|
9
|
+
stub_request(:get, "#{@shop.admin_url}/carrier_services.json").to_return(status: 200, body: api_fixture('widget_store/carrier_services').to_json)
|
|
10
|
+
stub_request(:post, "#{@shop.admin_url}/carrier_services.json").with(body: api_fixture('widget_store/carrier_services_create').to_json).to_return(status: 200)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
@shop = nil
|
|
15
|
+
|
|
16
|
+
WebMock.reset!
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test 'carrier service synchronisation job creates expected carrier service' do
|
|
20
|
+
perform_enqueued_jobs do
|
|
21
|
+
DiscoApp::SynchroniseCarrierServiceJob.perform_later(@shop)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::SynchroniseWebhooksJobTest < ActionController::TestCase
|
|
4
|
+
include ActiveJob::TestHelper
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@shop = disco_app_shops(:widget_store)
|
|
8
|
+
|
|
9
|
+
stub_request(:get, "#{@shop.admin_url}/webhooks.json").to_return(status: 200, body: api_fixture('widget_store/webhooks').to_json)
|
|
10
|
+
stub_request(:post, "#{@shop.admin_url}/webhooks.json").to_return(status: 200)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
@shop = nil
|
|
15
|
+
|
|
16
|
+
WebMock.reset!
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test 'webhook synchronisation job creates webhooks for all expected topics' do
|
|
20
|
+
perform_enqueued_jobs do
|
|
21
|
+
DiscoApp::SynchroniseWebhooksJob.perform_later(@shop)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Assert that all 4 expected webhook topics were POSTed to.
|
|
25
|
+
['app/uninstalled', 'shop/update', 'orders/create', 'orders/paid'].each do |expected_webhook_topic|
|
|
26
|
+
assert_requested(:post, "#{@shop.admin_url}/webhooks.json", times: 1) { |request| request.body.include?(expected_webhook_topic) }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::CanBeLiquifiedTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
class Model
|
|
6
|
+
include ActiveModel::Model
|
|
7
|
+
include DiscoApp::Concerns::CanBeLiquified
|
|
8
|
+
|
|
9
|
+
def initialize(attributes = {})
|
|
10
|
+
@attributes = attributes
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def as_json
|
|
14
|
+
@attributes.as_json
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def liquid_model_name
|
|
18
|
+
'model'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def setup
|
|
23
|
+
@model = Model.new(
|
|
24
|
+
numeric: 42,
|
|
25
|
+
boolean: true,
|
|
26
|
+
empty: nil,
|
|
27
|
+
string: "The cat's pyjamas are \"great\".",
|
|
28
|
+
string_html: "The cat's pyjamas are <strong style=\"color: red;\">great</strong>.",
|
|
29
|
+
array_of_numerics: [1, 2, 3],
|
|
30
|
+
array_of_strings: ['A', 'B', 'C'],
|
|
31
|
+
hash: {}
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def teardown
|
|
36
|
+
@model = nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
# Test Liquid output.
|
|
41
|
+
##
|
|
42
|
+
|
|
43
|
+
test 'correct liquid is output for model' do
|
|
44
|
+
assert_equal liquid_fixture('model.liquid'), @model.to_liquid
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
# Return an asset fixture as a string.
|
|
50
|
+
def liquid_fixture(path)
|
|
51
|
+
filename = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'fixtures', 'liquid', "#{path}")
|
|
52
|
+
File.read(filename).strip
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::HasMetafieldsTest < ActiveSupport::TestCase
|
|
4
|
+
include DiscoApp::Test::ShopifyAPI
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@product = products(:ipod)
|
|
8
|
+
@shop = @product.shop
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
@product = nil
|
|
13
|
+
@shop = nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test 'can write metafields with a single namespace' do
|
|
17
|
+
stub_api_request(:put, "#{@shop.admin_url}/products/#{@product.id}.json", 'widget_store/products/write_metafields_single_namespace')
|
|
18
|
+
assert @shop.temp { @product.write_metafields(
|
|
19
|
+
namespace1: {
|
|
20
|
+
key1: 'value1',
|
|
21
|
+
key2: 2
|
|
22
|
+
}
|
|
23
|
+
) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test 'can write metafields with multiple namespaces' do
|
|
27
|
+
stub_api_request(:put, "#{@shop.admin_url}/products/#{@product.id}.json", 'widget_store/products/write_metafields_multiple_namespaces')
|
|
28
|
+
assert @shop.temp { @product.write_metafields(
|
|
29
|
+
namespace1: {
|
|
30
|
+
n1key1: 'value1',
|
|
31
|
+
n1key2: 2
|
|
32
|
+
},
|
|
33
|
+
namespace2: {
|
|
34
|
+
n2key3: 'value3',
|
|
35
|
+
n2key4: 2
|
|
36
|
+
},
|
|
37
|
+
) }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
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', 'assets/test.js', {}, {})
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
test 'individual js asset renders correctly with minification' do
|
|
68
|
+
assert_equal asset_fixture('test.min.js').strip, @js_configuration.send('render_asset_group_asset', 'assets/test.js', {}, minify: true)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
test 'js asset group renders and uploads to shopify' do
|
|
72
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_test_js')
|
|
73
|
+
@js_configuration.render_asset_group(:js_assets)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test 'widget asset group renders and uploads to shopify' do
|
|
77
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_widget_scss')
|
|
78
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_widget_js')
|
|
79
|
+
@widget_configuration.render_asset_group(:widget_assets)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
test 'liquid asset group renders and uploads to shopify' do
|
|
83
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_widget_liquid')
|
|
84
|
+
@widget_configuration.render_asset_group(:liquid_assets)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
test 'script tag asset group renders, uploads to shopify and creates new script tag' do
|
|
88
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_script_tag_js')
|
|
89
|
+
stub_api_request(:get, "#{@shop.admin_url}/script_tags.json", 'widget_store/assets/get_script_tags_empty')
|
|
90
|
+
stub_api_request(:post, "#{@shop.admin_url}/script_tags.json", 'widget_store/assets/create_script_tag')
|
|
91
|
+
@widget_configuration.render_asset_group(:script_tag_assets)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
test 'script tag asset group renders, uploads to shopify and updates existing script tag' do
|
|
95
|
+
stub_api_request(:put, "#{@shop.admin_url}/assets.json", 'widget_store/assets/create_script_tag_js')
|
|
96
|
+
stub_api_request(:get, "#{@shop.admin_url}/script_tags.json", 'widget_store/assets/get_script_tags_preexisting')
|
|
97
|
+
stub_api_request(:put, "#{@shop.admin_url}/script_tags/38138886.json", 'widget_store/assets/update_script_tag')
|
|
98
|
+
@widget_configuration.render_asset_group(:script_tag_assets)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
# Return an asset fixture as a string.
|
|
104
|
+
def asset_fixture(path)
|
|
105
|
+
filename = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'fixtures', 'assets', "#{path}")
|
|
106
|
+
File.read(filename)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::SessionTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@shop = disco_app_shops(:widget_store)
|
|
7
|
+
@session = DiscoApp::Session.create(
|
|
8
|
+
session_id: 'a91bfc51fa79c9d09d43e2615d9345d4',
|
|
9
|
+
data: {
|
|
10
|
+
:shopify => @shop.id,
|
|
11
|
+
:shopify_domain => @shop.shopify_domain
|
|
12
|
+
}
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test 'logged in sessions are linked to their shop' do
|
|
17
|
+
assert_equal @shop.id, @session.shop_id
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test 'can fetch sessions for a particular shop through association' do
|
|
21
|
+
assert_equal 1, @shop.sessions.size
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test 'sessions can be deleted by shop' do
|
|
25
|
+
DiscoApp::Session.create(session_id: 'a91bfc51fa79c9d09d43e2615d9345d5', data: {})
|
|
26
|
+
assert_equal 2, DiscoApp::Session.count
|
|
27
|
+
@shop.sessions.delete_all
|
|
28
|
+
assert_equal 1, DiscoApp::Session.count
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::ShopTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@shop = disco_app_shops(:widget_store)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def teardown
|
|
10
|
+
@shop = nil
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test 'shops can be extended via concerns' do
|
|
14
|
+
assert_equal 'Australia', @shop.country.name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test 'can fetch a list of all of a shops subscriptions' do
|
|
18
|
+
assert_equal 2, @shop.subscriptions.size
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test 'can fetch a shops current subscription' do
|
|
22
|
+
assert_equal 1, @shop.subscriptions.active.size
|
|
23
|
+
assert @shop.current_subscription?
|
|
24
|
+
assert_equal disco_app_subscriptions(:current_widget_store_subscription), @shop.current_subscription
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test 'time_zone helper returns correct time zone instance when known timezone defined' do
|
|
28
|
+
assert_equal 'Melbourne', @shop.time_zone.name
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
test 'time_zone helper returns default Rails timezone when no known timezone defined' do
|
|
32
|
+
assert_equal 'UTC', disco_app_shops(:widget_store_dev).time_zone.name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test 'locale helper returns correct locale when defined on shop model' do
|
|
36
|
+
assert_equal :sv, disco_app_shops(:widget_store_dev).locale
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
test 'locale helper returns correct en locale when no known locale defined' do
|
|
40
|
+
assert_equal :en, disco_app_shops(:widget_store).locale
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::SubscriptionTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@shop = disco_app_shops(:widget_store)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def teardown
|
|
10
|
+
@shop = nil
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test 'changing the amount on a subscription cancels its charge' do
|
|
14
|
+
assert @shop.current_subscription.active_charge?
|
|
15
|
+
@shop.current_subscription.update(amount: 1138)
|
|
16
|
+
assert_not @shop.current_subscription.active_charge?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class DiscoApp::ChargesServiceTest < ActiveSupport::TestCase
|
|
4
|
+
include DiscoApp::Test::ShopifyAPI
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@shop = disco_app_shops(:widget_store)
|
|
8
|
+
@subscription = disco_app_subscriptions(:current_widget_store_subscription)
|
|
9
|
+
@new_charge = disco_app_recurring_application_charges(:new_widget_store_subscription_recurring_charge)
|
|
10
|
+
|
|
11
|
+
@dev_shop = disco_app_shops(:widget_store_dev)
|
|
12
|
+
@dev_subscription = disco_app_subscriptions(:current_widget_store_dev_subscription)
|
|
13
|
+
@dev_new_charge = disco_app_application_charges(:new_widget_store_dev_subscription_one_time_charge)
|
|
14
|
+
|
|
15
|
+
Timecop.freeze
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def teardown
|
|
19
|
+
@shop = nil
|
|
20
|
+
@subscription = nil
|
|
21
|
+
@new_charge = nil
|
|
22
|
+
|
|
23
|
+
@dev_shop = nil
|
|
24
|
+
@dev_subscription = nil
|
|
25
|
+
@dev_new_charge = nil
|
|
26
|
+
|
|
27
|
+
Timecop.return
|
|
28
|
+
|
|
29
|
+
WebMock.reset!
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
test 'creating a new charge for a recurring subscription is successful' do
|
|
33
|
+
res = { "recurring_application_charge": { "name": "Basic",
|
|
34
|
+
"price": "9.99",
|
|
35
|
+
"trial_days": 14,
|
|
36
|
+
"return_url": /^https:\/\/test\.example\.com\/subscriptions\/304261385\/charges\/53297050(1|2)\/activate$/,
|
|
37
|
+
"test": true
|
|
38
|
+
} }
|
|
39
|
+
stub_request(:post, "#{@shop.admin_url}/recurring_application_charges.json")
|
|
40
|
+
.with(body: res
|
|
41
|
+
).to_return(status: 201, body:api_fixture("widget_store/charges/create_recurring_application_charge_response").to_json)
|
|
42
|
+
|
|
43
|
+
new_charge = DiscoApp::ChargesService.create(@shop, @subscription)
|
|
44
|
+
assert_equal 654381179, new_charge.shopify_id
|
|
45
|
+
assert_equal 'https://apple.myshopify.com/admin/charges/654381179/confirm_recurring_application_charge?signature=BAhpBHsQASc%3D--b2e90c6e4e94fbae15a464c566a31a1c23e6bffa', new_charge.confirmation_url
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
test 'activating a pending recurring charge is not successful' do
|
|
49
|
+
stub_api_request(:get, "#{@shop.admin_url}/recurring_application_charges/654381179.json", 'widget_store/charges/get_pending_recurring_application_charge')
|
|
50
|
+
assert_not DiscoApp::ChargesService.activate(@shop, @new_charge)
|
|
51
|
+
assert @new_charge.pending?
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
test 'activating a declined recurring charge is not successful' do
|
|
55
|
+
stub_api_request(:get, "#{@shop.admin_url}/recurring_application_charges/654381179.json", 'widget_store/charges/get_declined_recurring_application_charge')
|
|
56
|
+
assert_not DiscoApp::ChargesService.activate(@shop, @new_charge)
|
|
57
|
+
assert @new_charge.declined?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
test 'activating an accepted recurring charge is successful and cancels any existing recurring charges' do
|
|
61
|
+
stub_api_request(:get, "#{@shop.admin_url}/recurring_application_charges/654381179.json", 'widget_store/charges/get_accepted_recurring_application_charge')
|
|
62
|
+
stub_api_request(:post, "#{@shop.admin_url}/recurring_application_charges/654381179/activate.json", 'widget_store/charges/activate_recurring_application_charge')
|
|
63
|
+
|
|
64
|
+
old_charge = @subscription.active_charge
|
|
65
|
+
assert old_charge.active?
|
|
66
|
+
|
|
67
|
+
assert DiscoApp::ChargesService.activate(@shop, @new_charge)
|
|
68
|
+
assert @new_charge.active?
|
|
69
|
+
|
|
70
|
+
old_charge.reload
|
|
71
|
+
assert old_charge.cancelled?
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
test 'activating an accepted recurring charge cancels other recurring charges' do
|
|
75
|
+
stub_api_request(:get, "#{@shop.admin_url}/recurring_application_charges/654381179.json", 'widget_store/charges/get_accepted_recurring_application_charge')
|
|
76
|
+
stub_api_request(:post, "#{@shop.admin_url}/recurring_application_charges/654381179/activate.json", 'widget_store/charges/activate_recurring_application_charge')
|
|
77
|
+
|
|
78
|
+
assert DiscoApp::ChargesService.activate(@shop, @new_charge)
|
|
79
|
+
assert @new_charge.active?
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
test 'creating a new charge for a one-time subscription is successful' do
|
|
83
|
+
stub_api_request(:post, "#{@dev_shop.admin_url}/application_charges.json", 'widget_store/charges/create_application_charge')
|
|
84
|
+
|
|
85
|
+
new_charge = DiscoApp::ChargesService.create(@dev_shop, @dev_subscription)
|
|
86
|
+
assert_equal 1012637323, new_charge.shopify_id
|
|
87
|
+
assert_equal 'https://apple.myshopify.com/admin/charges/1012637323/confirm_application_charge?signature=BAhpBIueWzw%3D--0ea1abacaf9d6fd538b7e9a7023e9b71ce1c7e98', new_charge.confirmation_url
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
test 'activating a pending one-time charge is not successful' do
|
|
91
|
+
stub_api_request(:get, "#{@dev_shop.admin_url}/application_charges/1012637323.json", 'widget_store/charges/get_pending_application_charge')
|
|
92
|
+
|
|
93
|
+
assert_not DiscoApp::ChargesService.activate(@dev_shop, @dev_new_charge)
|
|
94
|
+
assert @dev_new_charge.pending?
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
test 'activating a declined one-time charge is not successful' do
|
|
98
|
+
stub_api_request(:get, "#{@dev_shop.admin_url}/application_charges/1012637323.json", 'widget_store/charges/get_declined_application_charge')
|
|
99
|
+
|
|
100
|
+
assert_not DiscoApp::ChargesService.activate(@dev_shop, @dev_new_charge)
|
|
101
|
+
assert @dev_new_charge.declined?
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
test 'activating an accepted one-time charge is successful' do
|
|
105
|
+
stub_api_request(:get, "#{@dev_shop.admin_url}/application_charges/1012637323.json", 'widget_store/charges/get_accepted_application_charge')
|
|
106
|
+
stub_api_request(:post, "#{@dev_shop.admin_url}/application_charges/1012637323/activate.json", 'widget_store/charges/activate_application_charge')
|
|
107
|
+
|
|
108
|
+
assert DiscoApp::ChargesService.activate(@dev_shop, @dev_new_charge)
|
|
109
|
+
assert @dev_new_charge.active?
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|