From f6cc1b099f33662bcf51628c39d93f30dcc93fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Semp=C3=A9?= Date: Mon, 7 Oct 2024 16:10:39 +0200 Subject: [PATCH] feat(dunning): Add permission to DunningCampaignsResolver --- app/config/permissions/definition.yml | 1 + app/config/permissions/role-finance.yml | 1 + app/config/permissions/role-manager.yml | 1 + .../resolvers/dunning_campaigns_resolver.rb | 2 ++ schema.graphql | 1 + schema.json | 18 ++++++++++++++++++ .../dunning_campaigns_resolver_spec.rb | 9 ++++++++- spec/queries/dunning_campaigns_query_spec.rb | 18 +++++++++++++----- 8 files changed, 45 insertions(+), 6 deletions(-) diff --git a/app/config/permissions/definition.yml b/app/config/permissions/definition.yml index 1f355d3615c..b3de653bb1e 100644 --- a/app/config/permissions/definition.yml +++ b/app/config/permissions/definition.yml @@ -31,6 +31,7 @@ customers: update: delete: dunning_campaigns: + view: create: subscriptions: view: true diff --git a/app/config/permissions/role-finance.yml b/app/config/permissions/role-finance.yml index 0a6d99e3ce5..9a6d6b9c69b 100644 --- a/app/config/permissions/role-finance.yml +++ b/app/config/permissions/role-finance.yml @@ -27,6 +27,7 @@ customers: update: false delete: false dunning_campaigns: + view: true create: true subscriptions: create: false diff --git a/app/config/permissions/role-manager.yml b/app/config/permissions/role-manager.yml index 06026ded3e8..517e9f6052c 100644 --- a/app/config/permissions/role-manager.yml +++ b/app/config/permissions/role-manager.yml @@ -27,6 +27,7 @@ customers: update: true delete: true dunning_campaigns: + view: false create: false subscriptions: create: true diff --git a/app/graphql/resolvers/dunning_campaigns_resolver.rb b/app/graphql/resolvers/dunning_campaigns_resolver.rb index 9ff9eac88bb..8f21adcf2bb 100644 --- a/app/graphql/resolvers/dunning_campaigns_resolver.rb +++ b/app/graphql/resolvers/dunning_campaigns_resolver.rb @@ -7,6 +7,8 @@ class DunningCampaignsResolver < Resolvers::BaseResolver description "Query dunning campaigns of an organization" + REQUIRED_PERMISSION = "dunning_campaigns:view" + argument :applied_to_organization, Boolean, required: false argument :limit, Integer, required: false argument :order, String, required: false diff --git a/schema.graphql b/schema.graphql index 699889ab287..2f3c3c37279 100644 --- a/schema.graphql +++ b/schema.graphql @@ -5888,6 +5888,7 @@ type Permissions { developersManage: Boolean! draftInvoicesUpdate: Boolean! dunningCampaignsCreate: Boolean! + dunningCampaignsView: Boolean! invoicesCreate: Boolean! invoicesExport: Boolean! invoicesSend: Boolean! diff --git a/schema.json b/schema.json index 3ec92414dc5..4fd402914a0 100644 --- a/schema.json +++ b/schema.json @@ -28760,6 +28760,24 @@ ] }, + { + "name": "dunningCampaignsView", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null, + "args": [ + + ] + }, { "name": "invoicesCreate", "description": null, diff --git a/spec/graphql/resolvers/dunning_campaigns_resolver_spec.rb b/spec/graphql/resolvers/dunning_campaigns_resolver_spec.rb index 1c6bbcd9a76..3c64d0ded69 100644 --- a/spec/graphql/resolvers/dunning_campaigns_resolver_spec.rb +++ b/spec/graphql/resolvers/dunning_campaigns_resolver_spec.rb @@ -3,6 +3,7 @@ require "rails_helper" RSpec.describe Resolvers::DunningCampaignsResolver, type: :graphql do + let(:required_permission) { "dunning_campaigns:view" } let(:query) do <<~GQL query { @@ -20,10 +21,15 @@ before { dunning_campaign } - it "returns a list of dunning campaigns" do + it_behaves_like "requires current user" + it_behaves_like "requires current organization" + it_behaves_like "requires permission", "dunning_campaigns:view" + + it "returns a list of dunning campaigns", :aggregate_failures do result = execute_graphql( current_user: membership.user, current_organization: organization, + permissions: required_permission, query: ) @@ -55,6 +61,7 @@ result = execute_graphql( current_user: membership.user, current_organization: create(:organization), + permissions: required_permission, query: ) diff --git a/spec/queries/dunning_campaigns_query_spec.rb b/spec/queries/dunning_campaigns_query_spec.rb index 7a7cd5c4066..42b0819b40f 100644 --- a/spec/queries/dunning_campaigns_query_spec.rb +++ b/spec/queries/dunning_campaigns_query_spec.rb @@ -17,7 +17,7 @@ create(:dunning_campaign, organization:, name: "defgh", code: "11", applied_to_organization: true) end let(:dunning_campaign_second) do - create(:dunning_campaign, organization:, name: "abcde", code: "22", applied_to_organization: true) + create(:dunning_campaign, organization:, name: "abcde", code: "22", applied_to_organization: false) end let(:dunning_campaign_third) do @@ -45,7 +45,7 @@ context "with pagination" do let(:pagination) { {page: 2, limit: 2} } - it "applies the pagination" do + it "applies the pagination", :aggregate_failures do aggregate_failures do expect(result).to be_success expect(result.dunning_campaigns.count).to eq(1) @@ -66,11 +66,19 @@ end end - context "with a filter on applied by default" do + context "with applied_to_organization is false" do let(:filters) { {applied_to_organization: false} } - it "returns only one dunning campaign" do - expect(result.dunning_campaigns).to eq([dunning_campaign_third]) + it "returns second and third campaigns" do + expect(result.dunning_campaigns).to eq([dunning_campaign_second, dunning_campaign_third]) + end + end + + context "with applied_to_organization is true" do + let(:filters) { {applied_to_organization: true} } + + it "returns only the first dunning campaign" do + expect(result.dunning_campaigns).to eq([dunning_campaign_first]) end end