From cb335e2577189ab8c285bf3e174d18c706c42dd2 Mon Sep 17 00:00:00 2001 From: Noah Silvera Date: Mon, 8 Feb 2021 14:45:58 -0800 Subject: 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 --- .../spree/admin/taxjar_settings_controller.rb | 8 ++++ .../spree/admin/shared/_configuration_menu.rb | 11 ++++++ .../spree/admin/taxjar_settings/show.html.erb | 12 ++++++ config/routes.rb | 7 ++++ spec/features/spree/admin/taxjar_settings_spec.rb | 45 ++++++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 app/controllers/spree/admin/taxjar_settings_controller.rb create mode 100644 app/overrides/spree/admin/shared/_configuration_menu.rb create mode 100644 app/views/spree/admin/taxjar_settings/show.html.erb create mode 100644 config/routes.rb create mode 100644 spec/features/spree/admin/taxjar_settings_spec.rb 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"] %> + +
+<% else %> +

You must provide a TaxJar API token to configure the extension. Please see the extension readme for details.

+<% 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 -- cgit v1.2.3