diff options
author | Noah Silvera <noah@super.gd> | 2021-02-08 14:45:58 -0800 |
---|---|---|
committer | Nicholas Van Doorn <vandoorn.nick@gmail.com> | 2021-05-12 14:57:57 -0700 |
commit | cb335e2577189ab8c285bf3e174d18c706c42dd2 (patch) | |
tree | e425040f5987b177d555e4254d6e44acf0ee856e | |
parent | a42a41f7539f06390ac657444dc39656cbd5debc (diff) |
Add basic UI for Taxjar settings in solidus admin
This commit adds a tab to the taxes section of the solidus admin
settings. This provides the foundation for further configuration of
taxjar through the solidus admin.
The settings should be hidden if an API key has not been provided.
This is to conform to the certification guidelines for an official
Taxjar extension.
Co-authored-by: Nick Van Doorn <nick@super.gd>
-rw-r--r-- | app/controllers/spree/admin/taxjar_settings_controller.rb | 8 | ||||
-rw-r--r-- | app/overrides/spree/admin/shared/_configuration_menu.rb | 11 | ||||
-rw-r--r-- | app/views/spree/admin/taxjar_settings/show.html.erb | 12 | ||||
-rw-r--r-- | config/routes.rb | 7 | ||||
-rw-r--r-- | spec/features/spree/admin/taxjar_settings_spec.rb | 45 |
5 files changed, 83 insertions, 0 deletions
diff --git a/app/controllers/spree/admin/taxjar_settings_controller.rb b/app/controllers/spree/admin/taxjar_settings_controller.rb new file mode 100644 index 0000000..a3a54b4 --- /dev/null +++ b/app/controllers/spree/admin/taxjar_settings_controller.rb @@ -0,0 +1,8 @@ +module Spree + module Admin + class TaxjarSettingsController < Spree::Admin::BaseController + def show + end + end + end +end diff --git a/app/overrides/spree/admin/shared/_configuration_menu.rb b/app/overrides/spree/admin/shared/_configuration_menu.rb new file mode 100644 index 0000000..89d9a60 --- /dev/null +++ b/app/overrides/spree/admin/shared/_configuration_menu.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +Deface::Override.new( + virtual_path: 'spree/admin/shared/_taxes_tabs', + name: 'add_taxjar_admin_menu_links', + insert_bottom: "[data-hook='admin_settings_taxes_tabs']" +) do + <<-HTML + <%= configurations_sidebar_menu_item "TaxJar Settings", admin_taxjar_settings_path %> + HTML +end diff --git a/app/views/spree/admin/taxjar_settings/show.html.erb b/app/views/spree/admin/taxjar_settings/show.html.erb new file mode 100644 index 0000000..c66e646 --- /dev/null +++ b/app/views/spree/admin/taxjar_settings/show.html.erb @@ -0,0 +1,12 @@ +<%= render 'spree/admin/shared/taxes_tabs' %> + +<% content_for :page_title do %> + <%= "Taxjar Settings" %> +<% end %> + +<% if ENV["TAXJAR_API_KEY"] %> + <table> + </table> +<% else %> + <p>You must provide a TaxJar API token to configure the extension. Please see the extension readme for details.</p> +<% end %> diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..36ac61d --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +Spree::Core::Engine.routes.draw do + namespace :admin do + resource :taxjar_settings, only: [:show] + end +end diff --git a/spec/features/spree/admin/taxjar_settings_spec.rb b/spec/features/spree/admin/taxjar_settings_spec.rb new file mode 100644 index 0000000..620b89b --- /dev/null +++ b/spec/features/spree/admin/taxjar_settings_spec.rb @@ -0,0 +1,45 @@ +require 'spec_helper' + +RSpec.feature 'Admin TaxJar Settings', js: true do + stub_authorization! + + background do + create :store, default: true + end + + describe "Taxjar settings tab" do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with("TAXJAR_API_KEY").and_return(api_token) + end + + context "Taxjar API token is set" do + let(:api_token) { "token" } + + it "shows a blank settings page" do + + visit "/admin" + click_on "Settings" + expect(page).to have_content("Taxes") + click_on "Taxes" + expect(page).to have_content("TaxJar Settings") + click_on "TaxJar Settings" + expect(page).not_to have_content "You must provide a TaxJar API token" + end + end + + context "Taxjar API token isn't set" do + let(:api_token) { nil } + + it "shows a descriptive error message" do + visit "/admin" + click_on "Settings" + expect(page).to have_content("Taxes") + click_on "Taxes" + expect(page).to have_content("TaxJar Settings") + click_on "TaxJar Settings" + expect(page).to have_content "You must provide a TaxJar API token" + end + end + end +end |