From 288a44371233cbae89b060aa96ed2303238c758c Mon Sep 17 00:00:00 2001 From: CatalinVoineag <11318084+CatalinVoineag@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:34:55 +0000 Subject: [PATCH 1/3] Add Api tokens counters to support api token index page --- .../api_tokens_controller.rb | 1 + .../api_tokens/index.html.erb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/controllers/support_interface/api_tokens_controller.rb b/app/controllers/support_interface/api_tokens_controller.rb index 968c99eb7e0..3db745589da 100644 --- a/app/controllers/support_interface/api_tokens_controller.rb +++ b/app/controllers/support_interface/api_tokens_controller.rb @@ -5,6 +5,7 @@ def index VendorAPIToken.arel_table[:last_used_at].desc.nulls_last, created_at: :desc, ) + @api_tokens_last_3_months_count = @api_tokens.where('last_used_at >= ?', 3.months.ago).count end def new diff --git a/app/views/support_interface/api_tokens/index.html.erb b/app/views/support_interface/api_tokens/index.html.erb index f4840fb3370..cce10ce4f59 100644 --- a/app/views/support_interface/api_tokens/index.html.erb +++ b/app/views/support_interface/api_tokens/index.html.erb @@ -2,6 +2,25 @@ <%= govuk_button_link_to 'Add a token', new_support_interface_api_token_path %> +
+
+ <%= render SupportInterface::TileComponent.new( + count: @api_tokens.count, + label: 'API tokens issued', + colour: :blue, + href: '#not-connected', + ) %> +
+
+ <%= render SupportInterface::TileComponent.new( + count: @api_tokens_last_3_months_count, + label: 'API tokens used in the last 3 months', + colour: :blue, + href: '#not-synced', + ) %> +
+
+ From bd41b2a1e407c890a77d8da5770eda49ccf52101 Mon Sep 17 00:00:00 2001 From: CatalinVoineag <11318084+CatalinVoineag@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:24:35 +0000 Subject: [PATCH 2/3] Improve styling and specs for support api token index page --- .../api_tokens/index.html.erb | 4 +- .../api_tokens/view_tokens_spec.rb | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 spec/system/support_interface/api_tokens/view_tokens_spec.rb diff --git a/app/views/support_interface/api_tokens/index.html.erb b/app/views/support_interface/api_tokens/index.html.erb index cce10ce4f59..37744a5246c 100644 --- a/app/views/support_interface/api_tokens/index.html.erb +++ b/app/views/support_interface/api_tokens/index.html.erb @@ -3,7 +3,7 @@ <%= govuk_button_link_to 'Add a token', new_support_interface_api_token_path %>
-
+
<%= render SupportInterface::TileComponent.new( count: @api_tokens.count, label: 'API tokens issued', @@ -11,7 +11,7 @@ href: '#not-connected', ) %>
-
+
<%= render SupportInterface::TileComponent.new( count: @api_tokens_last_3_months_count, label: 'API tokens used in the last 3 months', diff --git a/spec/system/support_interface/api_tokens/view_tokens_spec.rb b/spec/system/support_interface/api_tokens/view_tokens_spec.rb new file mode 100644 index 00000000000..acd381a3381 --- /dev/null +++ b/spec/system/support_interface/api_tokens/view_tokens_spec.rb @@ -0,0 +1,40 @@ +require 'rails_helper' + +RSpec.describe 'API tokens' do + include DfESignInHelpers + + scenario 'Support views vendors with api tokens' do + given_i_am_signed_in + and_api_tokens_exist + when_i_visit_the_tokens_page + then_i_see_all_the_providers_with_api_tokens + end + + def given_i_am_signed_in + sign_in_as_support_user + end + + def and_api_tokens_exist + vendor = create(:vendor, name: 'vendor_1') + provider_1 = create(:provider, name: 'Provider 1', vendor:) + provider_2 = create(:provider, name: 'Provider 2', vendor:) + + create(:vendor_api_token, provider: provider_1, last_used_at: 1.month.ago) + create(:vendor_api_token, provider: provider_2) + end + + def when_i_visit_the_tokens_page + visit support_interface_api_tokens_path + end + + def then_i_see_all_the_providers_with_api_tokens + expect(page).to have_content '2 API tokens issued' + expect(page).to have_content '1 API tokens used in the last 3 months' + + within '.govuk-table' do + expect(page).to have_content 'Provider 1' + expect(page).to have_content 'Provider 2' + expect(page).to have_content 'vendor_1' + end + end +end From ff6077cc21fdf8db33bd3c6f6be4ecc5bc2765aa Mon Sep 17 00:00:00 2001 From: CatalinVoineag <11318084+CatalinVoineag@users.noreply.github.com> Date: Thu, 23 Jan 2025 09:57:25 +0000 Subject: [PATCH 3/3] Add scope to vendor api tokens for support dashboard --- app/controllers/support_interface/api_tokens_controller.rb | 2 +- app/models/vendor_api_token.rb | 2 ++ app/views/support_interface/api_tokens/index.html.erb | 2 -- spec/system/support_interface/api_tokens/view_tokens_spec.rb | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/support_interface/api_tokens_controller.rb b/app/controllers/support_interface/api_tokens_controller.rb index 3db745589da..6c6e26e03a8 100644 --- a/app/controllers/support_interface/api_tokens_controller.rb +++ b/app/controllers/support_interface/api_tokens_controller.rb @@ -5,7 +5,7 @@ def index VendorAPIToken.arel_table[:last_used_at].desc.nulls_last, created_at: :desc, ) - @api_tokens_last_3_months_count = @api_tokens.where('last_used_at >= ?', 3.months.ago).count + @api_tokens_last_3_months_count = VendorAPIToken.used_in_last_3_months.count end def new diff --git a/app/models/vendor_api_token.rb b/app/models/vendor_api_token.rb index 8d59879d9d9..da31a6ea5c9 100644 --- a/app/models/vendor_api_token.rb +++ b/app/models/vendor_api_token.rb @@ -3,6 +3,8 @@ class VendorAPIToken < ApplicationRecord audited associated_with: :provider + scope :used_in_last_3_months, -> { where('last_used_at >= ?', 3.months.ago) } + def self.create_with_random_token!(provider:) unhashed_token, hashed_token = Devise.token_generator.generate(VendorAPIToken, :hashed_token) create!(hashed_token:, provider:) diff --git a/app/views/support_interface/api_tokens/index.html.erb b/app/views/support_interface/api_tokens/index.html.erb index 37744a5246c..b6e9223f5bd 100644 --- a/app/views/support_interface/api_tokens/index.html.erb +++ b/app/views/support_interface/api_tokens/index.html.erb @@ -8,7 +8,6 @@ count: @api_tokens.count, label: 'API tokens issued', colour: :blue, - href: '#not-connected', ) %>
@@ -16,7 +15,6 @@ count: @api_tokens_last_3_months_count, label: 'API tokens used in the last 3 months', colour: :blue, - href: '#not-synced', ) %>
diff --git a/spec/system/support_interface/api_tokens/view_tokens_spec.rb b/spec/system/support_interface/api_tokens/view_tokens_spec.rb index acd381a3381..8786261e17b 100644 --- a/spec/system/support_interface/api_tokens/view_tokens_spec.rb +++ b/spec/system/support_interface/api_tokens/view_tokens_spec.rb @@ -7,7 +7,7 @@ given_i_am_signed_in and_api_tokens_exist when_i_visit_the_tokens_page - then_i_see_all_the_providers_with_api_tokens + then_i_see_the_count_of_providers_with_api_tokens end def given_i_am_signed_in @@ -27,7 +27,7 @@ def when_i_visit_the_tokens_page visit support_interface_api_tokens_path end - def then_i_see_all_the_providers_with_api_tokens + def then_i_see_the_count_of_providers_with_api_tokens expect(page).to have_content '2 API tokens issued' expect(page).to have_content '1 API tokens used in the last 3 months'