From dcffab2708eefa61c60fd5cdc504d29c5c012d9e Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 21:55:22 +0200 Subject: [PATCH 01/25] feat(tests): add code coverage reporting --- .github/workflows/continuous-integration.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 5e29c33f..e0dd2476 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -118,5 +118,20 @@ jobs: env: RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} run: | + mkdir coverage docker run -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_HOST=localhost -e \ - RAILS_MASTER_KEY --network=host app bin/ci.sh spec + RAILS_MASTER_KEY --network=host -v "$(pwd)"'/coverage:/opt/app/coverage' app bin/ci.sh spec + + - name: Upload coverage report to Codecov + if: ${{ !cancelled() }} + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true + + - name: Upload coverage report artifact + if: ${{ !cancelled() }} + uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 + with: + name: coverage + path: coverage/ From 8fb8a2da8fd6dd6c63db8661225a3f681d680646 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 22:04:19 +0200 Subject: [PATCH 02/25] fix: correct coverage path --- .github/workflows/continuous-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index e0dd2476..d6f85955 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -120,7 +120,7 @@ jobs: run: | mkdir coverage docker run -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_HOST=localhost -e \ - RAILS_MASTER_KEY --network=host -v "$(pwd)"'/coverage:/opt/app/coverage' app bin/ci.sh spec + RAILS_MASTER_KEY --network=host -v "$(pwd)"'/coverage:/app/coverage' app bin/ci.sh spec - name: Upload coverage report to Codecov if: ${{ !cancelled() }} From db70b20db81b82744984260d60de7b85673541a8 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 22:05:35 +0200 Subject: [PATCH 03/25] feat: add if-no-files-found on upload-artifact --- .github/workflows/continuous-integration.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index d6f85955..69b483da 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -135,3 +135,4 @@ jobs: with: name: coverage path: coverage/ + if-no-files-found: error From 4cfd948174e124312c3a43f9683eeb96a0908c60 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 22:25:46 +0200 Subject: [PATCH 04/25] refactor: use simplecov-lcov --- Gemfile | 1 + Gemfile.lock | 4 +++- spec/spec_helper.rb | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index be4788b4..3ff08387 100644 --- a/Gemfile +++ b/Gemfile @@ -80,6 +80,7 @@ group :test do gem 'rubocop-rails', require: false gem 'rubocop-rspec', require: false gem 'simplecov', require: false + gem "simplecov-lcov", "~> 0.8.0", require: false gem 'terminal-notifier-guard' gem 'timecop' gem 'vcr' diff --git a/Gemfile.lock b/Gemfile.lock index 0e227f8e..5db8ae73 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -473,6 +473,7 @@ GEM simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) + simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) slack-notifier (2.4.0) spoon (0.0.6) @@ -596,6 +597,7 @@ DEPENDENCIES sidekiq (~> 6.0) sidekiq-scheduler (~> 5.0, >= 5.0.2) simplecov + simplecov-lcov (~> 0.8.0) slack-notifier (~> 2.0) spring spring-commands-rspec @@ -609,4 +611,4 @@ DEPENDENCIES webmock BUNDLED WITH - 2.2.33 + 2.4.14 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f491e970..01179056 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,7 @@ require 'simplecov' +require 'simplecov-lcov' +SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter SimpleCov.start 'rails' do add_filter 'app/jobs/sentry_job.rb' From bbba90b3271a5b9723fd0ce06b688d403fdddd12 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 22:44:46 +0200 Subject: [PATCH 05/25] chore: fixt lints --- .github/workflows/continuous-delivery.yml | 1 + .github/workflows/continuous-integration.yml | 3 +++ Gemfile | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-delivery.yml b/.github/workflows/continuous-delivery.yml index dd52674f..497407ab 100644 --- a/.github/workflows/continuous-delivery.yml +++ b/.github/workflows/continuous-delivery.yml @@ -107,6 +107,7 @@ jobs: sha: ${{ needs.merge.outputs.sha }} secrets: rails_master_key: ${{ secrets.RAILS_MASTER_KEY }} + codecov_token: ${{ secrets.CODECOV_TOKEN }} publish_image: name: Publish Image diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 69b483da..cc430f6f 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -15,6 +15,9 @@ on: rails_master_key: description: The Rails master key required: true + codecov_token: + description: Token for uploading Codecov reports + required: true jobs: build: diff --git a/Gemfile b/Gemfile index 3ff08387..3c6af89d 100644 --- a/Gemfile +++ b/Gemfile @@ -80,7 +80,7 @@ group :test do gem 'rubocop-rails', require: false gem 'rubocop-rspec', require: false gem 'simplecov', require: false - gem "simplecov-lcov", "~> 0.8.0", require: false + gem 'simplecov-lcov', '~> 0.8.0', require: false gem 'terminal-notifier-guard' gem 'timecop' gem 'vcr' From 6a7d7d6ad35dc4369d65649e1b2510643e4d7767 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:13:41 +0200 Subject: [PATCH 06/25] fix: remove test filters --- spec/spec_helper.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 01179056..ed1d6313 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -3,8 +3,6 @@ SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter SimpleCov.start 'rails' do - add_filter 'app/jobs/sentry_job.rb' - minimum_coverage 95 minimum_coverage_by_file 95 end From e655b4be492cfcc125af8d1886e645f7b4b3bee5 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:22:04 +0200 Subject: [PATCH 07/25] feat(README): add badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 17e16f4a..2e181a43 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ Alpha AMBER API ================ [![Continuous Integration](https://github.com/csvalpha/amber-api/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/csvalpha/amber-api/actions/workflows/continuous-integration.yml) [![Continuous Delivery](https://github.com/csvalpha/amber-api/actions/workflows/continuous-delivery.yml/badge.svg)](https://github.com/csvalpha/amber-api/actions/workflows/continuous-delivery.yml) +[![codecov](https://codecov.io/github/csvalpha/amber-api/graph/badge.svg?token=FC2UFYSOON)](https://codecov.io/github/csvalpha/amber-api) ## Prerequisites If you're going to run the project with Docker, you only need to install the following prerequisites: From 7a8ea9f0114960f323ba97da264f91feeada8f34 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:33:11 +0200 Subject: [PATCH 08/25] feat: add sentry_job spec --- spec/jobs/sentry_job_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 spec/jobs/sentry_job_spec.rb diff --git a/spec/jobs/sentry_job_spec.rb b/spec/jobs/sentry_job_spec.rb new file mode 100644 index 00000000..bafb9f00 --- /dev/null +++ b/spec/jobs/sentry_job_spec.rb @@ -0,0 +1,14 @@ +require 'rails_helper' + +RSpec.describe SentryJob, type: :job do + describe '#perform' do + let(:job) { described_class.new } + + before do + allow(Raven).to receive(:send_event) + job.perform('Example event') + end + + it { expect(Raven).to have_received(:send_event).with('Example event') } + end +end From 5d8273c8ee71ec508d901b93cd93f40f674d9b81 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 00:30:53 +0200 Subject: [PATCH 09/25] chore: add some tests --- spec/resources/v1/activity_resource_spec.rb | 12 ++++++++++++ spec/resources/v1/application_resource_spec.rb | 8 +++++--- spec/resources/v1/group_resource_spec.rb | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spec/resources/v1/activity_resource_spec.rb b/spec/resources/v1/activity_resource_spec.rb index dad1f37a..74048807 100644 --- a/spec/resources/v1/activity_resource_spec.rb +++ b/spec/resources/v1/activity_resource_spec.rb @@ -37,4 +37,16 @@ it { expect(filtered.length).to eq 1 } end end + + describe 'sort' do + let(:sorted) { described_class.apply_sort(Activity, options, context) } + + describe 'form.respond_until' do + let(:sort) { { form: { respond_until: :desc } } } + let(:form) { create(:form, respond_until: 1.day.from_now) } + let(:other_form) { create(:form, respond_until: 2.days.from_now) } + + it { expect(sorted).to match_array [other_form, form] } + end + end end diff --git a/spec/resources/v1/application_resource_spec.rb b/spec/resources/v1/application_resource_spec.rb index 0789cd72..ac56f65f 100644 --- a/spec/resources/v1/application_resource_spec.rb +++ b/spec/resources/v1/application_resource_spec.rb @@ -5,7 +5,8 @@ let(:other_user) do create(:user, first_name: 'Jan', last_name_prefix: 'de', last_name: 'Vries') end - let(:context) { { user: user } } + let(:application) { create(:application, name: 'Application') } + let(:context) { { user: user, application: application } } let(:options) { { context: context } } describe 'filters' do @@ -25,11 +26,12 @@ end context 'when searching for multiple records' do - let(:filter) { { search: %w[john vries] } } + let(:filter) { { search: %w[john vries application] } } it { expect(filtered).to include user } it { expect(filtered).to include other_user } - it { expect(filtered.size).to eq 2 } + it { expect(filtered).to include application } + it { expect(filtered.size).to eq 3 } end context 'when without records' do diff --git a/spec/resources/v1/group_resource_spec.rb b/spec/resources/v1/group_resource_spec.rb index a6032c4c..82cac9a4 100644 --- a/spec/resources/v1/group_resource_spec.rb +++ b/spec/resources/v1/group_resource_spec.rb @@ -47,7 +47,7 @@ end describe 'administrative' do - let(:filter) { { administrative: ['true'] } } + let(:filter) { { administrative: [true] } } let(:group) { create(:group, administrative: true) } let(:other_group) { create(:group, administrative: false) } From c9159452acff1fb17f220c121095d080f4437a3c Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 00:44:25 +0200 Subject: [PATCH 10/25] fix: tests --- spec/resources/v1/activity_resource_spec.rb | 9 ++++++++- spec/resources/v1/application_resource_spec.rb | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spec/resources/v1/activity_resource_spec.rb b/spec/resources/v1/activity_resource_spec.rb index 74048807..357c35ea 100644 --- a/spec/resources/v1/activity_resource_spec.rb +++ b/spec/resources/v1/activity_resource_spec.rb @@ -45,8 +45,15 @@ let(:sort) { { form: { respond_until: :desc } } } let(:form) { create(:form, respond_until: 1.day.from_now) } let(:other_form) { create(:form, respond_until: 2.days.from_now) } + let(:activity) { create(:activity: form: form) } + let(:other_activity) { create(:activity: form: other_form) } - it { expect(sorted).to match_array [other_form, form] } + before do + activity + other_activity + end + + it { expect(sorted).to match_array [other_activity, activity] } end end end diff --git a/spec/resources/v1/application_resource_spec.rb b/spec/resources/v1/application_resource_spec.rb index ac56f65f..5e2ba219 100644 --- a/spec/resources/v1/application_resource_spec.rb +++ b/spec/resources/v1/application_resource_spec.rb @@ -16,6 +16,7 @@ allow(described_class).to receive(:searchable_fields).and_return(%i[first_name last_name]) user other_user + application end describe 'search' do From f6377e9f846bf9e393a808118800f8cf4b2eef78 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 01:04:33 +0200 Subject: [PATCH 11/25] fix(activity_resource_spec): fix syntax error --- spec/resources/v1/activity_resource_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/resources/v1/activity_resource_spec.rb b/spec/resources/v1/activity_resource_spec.rb index 357c35ea..2b646fe4 100644 --- a/spec/resources/v1/activity_resource_spec.rb +++ b/spec/resources/v1/activity_resource_spec.rb @@ -45,8 +45,8 @@ let(:sort) { { form: { respond_until: :desc } } } let(:form) { create(:form, respond_until: 1.day.from_now) } let(:other_form) { create(:form, respond_until: 2.days.from_now) } - let(:activity) { create(:activity: form: form) } - let(:other_activity) { create(:activity: form: other_form) } + let(:activity) { create(:activity, form: form) } + let(:other_activity) { create(:activity, form: other_form) } before do activity From 1ccb7a1f007d3a1c7fa74bf5ad58a8a2ac5c6526 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 03:02:46 +0200 Subject: [PATCH 12/25] fix: tests --- app/resources/v1/application_resource.rb | 10 ---------- spec/resources/v1/activity_resource_spec.rb | 5 +++-- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/app/resources/v1/application_resource.rb b/app/resources/v1/application_resource.rb index 7dbf63e5..af3bb5c3 100644 --- a/app/resources/v1/application_resource.rb +++ b/app/resources/v1/application_resource.rb @@ -7,24 +7,18 @@ class V1::ApplicationResource < JSONAPI::Resource filter :search - # :nocov: def self.creatable_fields(_context) [] end - # :nocov: - def self.updatable_fields(context) creatable_fields(context) end - # :nocov: def self.searchable_fields [] end - # :nocov: - def self.apply_filter(records, filter, value, options) # Monkeypatch for weird bug in filter method # When defining a filter on application level @@ -79,10 +73,6 @@ def current_user context.fetch(:user) end - def current_application - context.fetch(:application) - end - def self.current_user_or_application(options) options.fetch(:context).fetch(:user) || options.fetch(:context).fetch(:application) end diff --git a/spec/resources/v1/activity_resource_spec.rb b/spec/resources/v1/activity_resource_spec.rb index 2b646fe4..477f4747 100644 --- a/spec/resources/v1/activity_resource_spec.rb +++ b/spec/resources/v1/activity_resource_spec.rb @@ -39,10 +39,11 @@ end describe 'sort' do - let(:sorted) { described_class.apply_sort(Activity, options, context) } + let(:sorted) { described_class.apply_sort(records, sort, context) } describe 'form.respond_until' do - let(:sort) { { form: { respond_until: :desc } } } + let(:records) { Activity.all } + let(:sort) { { 'form.respond_until' => :desc } } let(:form) { create(:form, respond_until: 1.day.from_now) } let(:other_form) { create(:form, respond_until: 2.days.from_now) } let(:activity) { create(:activity, form: form) } From 9586b28b7524eb6a27b32f54e1faa0739b4f618d Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:14:15 +0200 Subject: [PATCH 13/25] feat: add some tests to increase coverage --- app/resources/v1/application_resource.rb | 10 + .../v1/activities_controller/index_spec.rb | 14 ++ .../v1/books_controller/index_spec.rb | 14 +- .../v1/daily_verses_controller/index_spec.rb | 2 +- .../resources/v1/application_resource_spec.rb | 9 +- spec/spec_helper.rb | 4 + spec/vcr_cassettes/retrieve_daily_verse.yml | 232 +++++++++--------- 7 files changed, 163 insertions(+), 122 deletions(-) diff --git a/app/resources/v1/application_resource.rb b/app/resources/v1/application_resource.rb index af3bb5c3..ca74a3bf 100644 --- a/app/resources/v1/application_resource.rb +++ b/app/resources/v1/application_resource.rb @@ -7,17 +7,21 @@ class V1::ApplicationResource < JSONAPI::Resource filter :search + # :nocov: def self.creatable_fields(_context) [] end + # :nocov: def self.updatable_fields(context) creatable_fields(context) end + # :nocov: def self.searchable_fields [] end + # :nocov: def self.apply_filter(records, filter, value, options) # Monkeypatch for weird bug in filter method @@ -73,6 +77,12 @@ def current_user context.fetch(:user) end + # :nocov: + def current_application + context.fetch(:application) + end + # :nocov: + def self.current_user_or_application(options) options.fetch(:context).fetch(:user) || options.fetch(:context).fetch(:application) end diff --git a/spec/requests/v1/activities_controller/index_spec.rb b/spec/requests/v1/activities_controller/index_spec.rb index 607be1cd..91565fcd 100644 --- a/spec/requests/v1/activities_controller/index_spec.rb +++ b/spec/requests/v1/activities_controller/index_spec.rb @@ -13,5 +13,19 @@ it_behaves_like 'a publicly visible index request' do let(:model_name) { :activity } end + + describe 'sortable attributes' do + context 'when valid' do + let(:record_url) { '/v1/activities?sort=-form.respond_until' } + + it_behaves_like '200 OK' + end + + context 'when invalid' do + let(:record_url) { '/v1/activities?sort=form.id' } + + it_behaves_like '400 Bad Request' + end + end end end diff --git a/spec/requests/v1/books_controller/index_spec.rb b/spec/requests/v1/books_controller/index_spec.rb index ed5c94f7..eed9408c 100644 --- a/spec/requests/v1/books_controller/index_spec.rb +++ b/spec/requests/v1/books_controller/index_spec.rb @@ -39,7 +39,19 @@ let(:user) { create(:user, user_permission_list: [record_permission]) } end - it_behaves_like '200 OK' + describe 'with subtitle' do + it_behaves_like '200 OK' + end + + describe 'without subtitle' do + let(:request) do + VCR.use_cassette('retrieve_book_by_isbn_no_subtitle') do + get "#{record_url}?isbn=8713638034201" + end + end + + it_behaves_like '200 OK' + end end end end diff --git a/spec/requests/v1/daily_verses_controller/index_spec.rb b/spec/requests/v1/daily_verses_controller/index_spec.rb index 1e5f63f9..b5ecd483 100644 --- a/spec/requests/v1/daily_verses_controller/index_spec.rb +++ b/spec/requests/v1/daily_verses_controller/index_spec.rb @@ -6,7 +6,7 @@ let(:cache) { Rails.cache } let(:record_url) { '/v1/daily_verses' } let(:request) do - VCR.use_cassette('retrieve_daily_verse') do + VCR.use_cassette('retrieve_daily_verse', tag: :daily_verse) do get record_url end end diff --git a/spec/resources/v1/application_resource_spec.rb b/spec/resources/v1/application_resource_spec.rb index 5e2ba219..0789cd72 100644 --- a/spec/resources/v1/application_resource_spec.rb +++ b/spec/resources/v1/application_resource_spec.rb @@ -5,8 +5,7 @@ let(:other_user) do create(:user, first_name: 'Jan', last_name_prefix: 'de', last_name: 'Vries') end - let(:application) { create(:application, name: 'Application') } - let(:context) { { user: user, application: application } } + let(:context) { { user: user } } let(:options) { { context: context } } describe 'filters' do @@ -16,7 +15,6 @@ allow(described_class).to receive(:searchable_fields).and_return(%i[first_name last_name]) user other_user - application end describe 'search' do @@ -27,12 +25,11 @@ end context 'when searching for multiple records' do - let(:filter) { { search: %w[john vries application] } } + let(:filter) { { search: %w[john vries] } } it { expect(filtered).to include user } it { expect(filtered).to include other_user } - it { expect(filtered).to include application } - it { expect(filtered.size).to eq 3 } + it { expect(filtered.size).to eq 2 } end context 'when without records' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ed1d6313..913adbc1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -30,4 +30,8 @@ VCR.configure do |config| config.cassette_library_dir = 'spec/vcr_cassettes' config.hook_into :webmock + config.filter_sensitive_data('', :daily_verse) do + Base64.strict_encode64("#{Rails.application.config.x.daily_verse_user}:"\ + "#{Rails.application.config.x.daily_verse_password}") + end end diff --git a/spec/vcr_cassettes/retrieve_daily_verse.yml b/spec/vcr_cassettes/retrieve_daily_verse.yml index 2585660b..8f0e1b61 100644 --- a/spec/vcr_cassettes/retrieve_daily_verse.yml +++ b/spec/vcr_cassettes/retrieve_daily_verse.yml @@ -16,36 +16,63 @@ http_interactions: User-Agent: - Ruby Authorization: - - Basic aWN0QGNzdmFscGhhLm5sOjdjNTRlMzI0NzQ1M2FiYTBiYWFkMDllMDIxYWZjMTNhYWMwYjhiN2M= + - Basic response: status: code: 200 message: OK headers: - Date: - - Mon, 18 Feb 2019 19:40:03 GMT Server: - - Apache - Vary: - - Accept-Encoding - Content-Length: - - '2751' + - nginx + Date: + - Sat, 14 Oct 2023 04:28:55 GMT Content-Type: - - text/html; charset=UTF-8 + - application/json + Content-Length: + - '8507' + Connection: + - keep-alive + Report-To: + - '{"group":"default","max_age":10886400,"endpoints":[{"url":"https://api.jxs.nl/urireport/report.php"}],"include_subdomains":true}' + Nel: + - '{"report_to":"default","max_age":2592000,"include_subdomains":true,"failure_fraction":1.0}' + Permissions-Policy: + - interest-cohort=() + X-Frame-Options: + - sameorigin + X-Content-Type-Options: + - nosniff + Referrer-Policy: + - strict-origin-when-cross-origin X-Varnish: - - 4839335 4899610 + - 1386430 1211403 Age: - - '1503' + - '384' Via: - - 1.1 varnish (Varnish/5.2) + - 1.1 varnish (Varnish/6.0) Accept-Ranges: - bytes - Connection: - - keep-alive body: - encoding: ASCII-8BIT - string: '{"translations":{"nbv":"Nieuwe Bijbelvertaling","nbg":"NBG51","statenvertaling":"Statenvertaling","willibrord":"Willibrord","hsv":"Herziene - Statenvertaling","naardense":"Naardense Bijbel","bgt":"Bijbel in Gewone Taal"},"copyrights":{"willibrord":"De + encoding: UTF-8 + string: '{"_readme":{"how_to_use":"Please visit https:\/\/www.dagelijkswoord.nl\/verspreiden\/json-feed","donatie":"Deze + informatie wordt u gratis aangeboden door Stichting Dagelijks Woord. Wilt + u een bijdrage leveren om het doorontwikkelen van deze app en andere bijbel-diensten + mogelijk te maken, dan kan dat via http:\/\/www.dagelijkswoord.nl\/over\/donatie","use + in an app":"Als u onze content gebruikt in uw app, gaat dat ten koste van + het aantal gebruikers wat onze eigen app gebruikt. Dat is prima, het belangrijkste + is dat mensen Gods Woord lezen. Maar bij minder gebruikers van de app missen + we wel de inkomsten die we hard nodig hebben om onze eigen Bijbel-diensten + door te ontwikkelen. Daarom vragen we u vriendelijk op de eerste niet-zondag + tussen kerst en de jaarwisseling de tekst uit in_app_use.app_text aan gebruikers + te tonen en hierbij de link uit in_app_use.app_link te gebruiken. Dit is niet + verplicht, maar wordt wel zeer op prijs gesteld.","link":"If you''re using + the data from this feed, please be so kind to link to our website.","let op + - nbg21":"De vertaling nbg21 is een typefout en zal per 31 december 2023 uit + de API verdwijnen. Gebruik nbv21 in plaats daarvan."},"in_app_use":{"app_text":"Deze + app maakt gebruik van de Bijbelteksten van Stichting Dagelijks Woord. Steunt + u de doorontwikkeling van Dagelijks Woord met een bijdrage?","app_link":"https:\/\/www.dagelijkswoord.nl\/inbound-link\/donate\/?query_from=%YOURAPPNAME%"},"translations":{"nbv":"Nieuwe + Bijbelvertaling","nbg":"NBG51","statenvertaling":"Statenvertaling","willibrord":"Willibrord","hsv":"Herziene + Statenvertaling","naardense":"Naardense Bijbel","bgt":"Bijbel in Gewone Taal","nbv21":"NBV21","bb":"BasisBijbel","nbg21":"NBV21"},"copyrights":{"willibrord":"De bijbeltekst in deze uitgave is ontleend aan de Willibrordvertaling (herziene editie), (C) Katholieke Bijbelstichting 1995.","statenvertaling":"De bijbeltekst in deze uitgave is ontleend aan de Statenvertaling 1977, (C) Nederlands Bijbelgenootschap @@ -57,100 +84,77 @@ http_interactions: ontleend aan de Bijbel in de Herziene Statenvertaling, (C) Stichting HSV 2010. Alle rechten voorbehouden, (C) Stichting HSV en Uitgeverij Jongbloed - Heerenveen.","bgt":"Deze bijbeltekst komt uit de Bijbel in Gewone Taal, (C) Nederlands Bijbelgenootschap - 2014."},"data":[{"ts":"2019-02-18","source":"Jeremia 29:11-14a","fulltext":"http:\/\/bijbel.dagelijkswoord.nl\/bijbel\/Jeremia+29%3A11-14a?from=json","wpId":"5920","text":{"nbv":"Mijn - plan met jullie staat vast - spreekt de HEER. Ik heb jullie geluk voor ogen, - niet jullie ongeluk: ik zal je een hoopvolle toekomst geven. Jullie zullen - mij aanroepen en tot mij bidden, en ik zal naar jullie luisteren. Jullie zullen - mij zoeken en ook vinden, als jullie mij tenminste met hart en ziel zoeken. - Ik zal me door jullie laten vinden - spreekt de HEER - en ik zal in je lot - een keer brengen. Ik zal jullie samenbrengen uit alle volken en plaatsen waarheen - ik je verbannen heb - spreekt de HEER - en je laten terugkeren naar Jeruzalem, - waaruit ik je heb laten wegvoeren.","nbg":"Want Ik weet, welke gedachten Ik - over u koester, luidt het woord des HEREN, gedachten van vrede en niet van - onheil, om u een hoopvolle toekomst te geven. Dan zult gij Mij aanroepen en - heengaan en tot Mij bidden, en Ik zal naar u horen; dan zult gij Mij zoeken - en vinden, wanneer gij naar Mij vraagt met uw ganse hart. Dan zal Ik Mij door - u laten vinden, luidt het woord des HEREN, en in uw lot een keer brengen; - dan zal Ik u verzamelen uit alle volkeren en van alle plaatsen waarheen Ik - u verstoten heb, luidt het woord des HEREN, en u terugbrengen naar de plaats - vanwaar Ik u in ballingschap heb doen wegvoeren.","statenvertaling":"Want - Ik weet de gedachten, die Ik over u denk, spreekt de HEERE, gedachten des - vredes, en niet des kwaads, dat Ik u geve het einde en de verwachting. Dan - zult gij Mij aanroepen, en henengaan, en tot Mij bidden; en Ik zal naar u - horen. En gij zult Mij zoeken en vinden, wanneer gij naar Mij zult vragen - met uw ganse hart. En Ik zal van ulieden gevonden worden, spreekt de HEERE, - en Ik zal uw gevangenis wenden, en u vergaderen uit al de volken, en uit al - de plaatsen, waarhenen Ik u gedreven heb, spreekt de HEERE; en Ik zal u wederbrengen - tot de plaats, van waar Ik u gevankelijk heb doen wegvoeren.","willibrord":"Ik - ken de plannen die Ik met u heb - godsspraak van de HEER. Ze hebben uw heil - op het oog, niet uw ongeluk, en een hoopvolle toekomst. Als u Mij aanroept - en tot Mij bidt, zal Ik u verhoren. Als u Mij zoekt, met heel uw hart zoekt, - zult u Mij vinden, dan laat Ik mij vinden - godsspraak van de HEER. Ik herstel - u weer in uw vroegere staat; uit de versnippering over alle volken en plaatsen - breng Ik u weer samen - godsspraak van de HEER. Ik breng u terug naar deze - plaats, waaruit Ik u heb weggevoerd.","hsv":"Ik immers, Ik ken de gedachten - die Ik over u koester, spreekt de HEERE. Het zijn gedachten van vrede en niet - van kwaad, namelijk om u toekomst en hoop te geven. Dan zult u Mij aanroepen - en heengaan, u zult tot Mij bidden en Ik zal naar u luisteren. U zult Mij - zoeken en vinden, wanneer u naar Mij zult vragen met heel uw hart. Ik zal - door u gevonden worden, spreekt de HEERE, Ik zal een omkeer brengen in uw - gevangenschap en u bijeenbrengen uit alle volken en uit alle plaatsen waarheen - Ik u verdreven heb, spreekt de HEERE, en Ik zal u terugbrengen naar de plaats - vanwaar Ik u in ballingschap heb gevoerd.","naardense":"Want zelf ken ik de - gedachten het best die ik over u denk, is de tijding van de Ene,- gedachten - van vrede en niet van kwaad: u een toekomst te geven en goede hoop. Roepen - zult ge mij en voortgaan tot mij te bidden,- en ik zal naar u horen; zoeken - zult ge mij en vinden,- wanneer ge naar mij vragen zult met heel uw hart; - ik zal mij door u laten vinden, is de tijding van de Ene, en in uw kerkering - een keer brengen: verzamelen zal ik u uit alle volkeren en uit alle oorden - waarheen ik u heb weggestoten, is de tijding van de Ene; doen terugkeren zal - ik u naar het oord waaruit ik u heb verbannen.","bgt":"Dit is mijn besluit, - dit is mijn plan met jullie: Het zal goed met jullie aflopen, niet slecht. - Ik zorg dat er voor jullie een nieuwe tijd komt. Ik zal jullie nieuwe hoop - geven. In die tijd zullen jullie weer tot mij bidden, en zal ik naar jullie - luisteren. Jullie zullen mij zoeken. En als je mij zoekt met heel je hart, - zul je mij vinden. Ja, jullie zullen mij weer vinden. En ik zal ervoor zorgen - dat het weer goed met jullie gaat. Ik haal jullie allemaal terug, uit alle - landen en alle plaatsen waar ik jullie heen gejaagd heb. Dan zullen jullie - terugkomen in Jeruzalem."}},{"ts":"2019-02-17","source":"2 Timoteus 2:1","fulltext":"http:\/\/bijbel.dagelijkswoord.nl\/bijbel\/2+Timoteus+2%3A1?from=json","wpId":"5919","text":{"nbv":"Mijn - kind, wees sterk door de genade van Christus Jezus.","nbg":"Gij dan, mijn - kind, wees krachtig in de genade van Christus Jezus,","statenvertaling":"Gij - dan, mijn zoon, word gesterkt in de genade, die in Christus Jezus is;","willibrord":"U - dan, mijn kind, wees sterk door de genade van Christus Jezus.","hsv":"U dan, - mijn zoon, word gesterkt in de genade die in Christus Jezus is.","naardense":"Jij - dan, mijn kind, wees krachtig in de genade die is in Christus Jezus,","bgt":"Timote\u00fcs, - mijn zoon, vertrouw erop dat Jezus Christus goed voor je is."}},{"ts":"2019-02-16","source":"1 - Korintiers 15:54-55","fulltext":"http:\/\/bijbel.dagelijkswoord.nl\/bijbel\/1+Korintiers+15%3A54-55?from=json","wpId":"5918","text":{"nbv":"En - wanneer dit vergankelijke lichaam is bekleed met het onvergankelijke, dit - sterfelijke met het onsterfelijke, zal wat geschreven staat in vervulling - gaan: ''De dood is opgeslokt en overwonnen. Dood, waar is je overwinning? - Dood, waar is je angel?''","nbg":"En zodra dit vergankelijke onvergankelijkheid - aangedaan heeft, en dit sterfelijke onsterfelijkheid aangedaan heeft, zal - het woord werkelijkheid worden, dat geschreven is: De dood is verzwolgen in - de overwinning. Dood, waar is uw overwinning? Dood, waar is uw prikkel?","statenvertaling":"En - wanneer dit verderfelijke zal onverderfelijkheid aangedaan hebben, en dit - sterfelijke zal onsterfelijkheid aangedaan hebben, alsdan zal het woord geschieden, - dat geschreven is: De dood is verslonden tot overwinning. Dood, waar is uw - prikkel? Hel, waar is uw overwinning?","willibrord":"En wanneer dit vergankelijke - met onvergankelijkheid is bekleed en dit sterfelijke met onsterfelijkheid, - dan zal het woord van de Schrift in vervulling gaan: De dood is verslonden, - de overwinning is behaald! Dood, waar is je overwinning? Dood, waar is je - angel?","hsv":"En wanneer dit vergankelijke zich met onvergankelijkheid bekleed - zal hebben, en dit sterfelijke zich met onsterfelijkheid bekleed zal hebben, - dan zal het woord geschieden dat geschreven staat: De dood is verslonden tot - overwinning. Dood, waar is uw prikkel? Graf, waar is uw overwinning?","naardense":"Maar - wanneer dit vergankelijke bekleed zal zijn met onvergankelijkheid en dit sterfelijke - bekleed zal zijn met onsterfelijkheid, dan zal het woord geschieden dat geschreven - is: ''verzwolgen is de dood door de overwinning; dood, waar is je overwinning, - dood, waar is je angel?''","bgt":"Ons sterfelijke lichaam zal dus veranderd - worden in een onsterfelijk lichaam. Dan wordt werkelijkheid wat in de heilige - boeken staat: ''De dood is overwonnen en voor altijd verdwenen. De dood heeft - geen macht meer en kan ons geen kwaad meer doen!''"}}],"strings":{"donatie":"Deze - informatie wordt u gratis aangeboden door Stichting Dagelijks Woord. Wilt - u een bijdrage leveren om het doorontwikkelen van deze app en andere bijbel-diensten - mogelijk te maken, dan kan dat via http:\/\/www.dagelijkswoord.nl\/over\/donatie","link":"If - you''re using the data from this feed, please be so kind to link to our website."},"debug_info":{"worker":"work_edge","generated":"2019-02-18 - 19:40:03"}}' - http_version: - recorded_at: Sun, 17 Feb 2019 23:00:00 GMT -recorded_with: VCR 4.0.0 + 2014.","nbv21":"De bijbeltekst in deze uitgave is ontleend aan de NBV21 (C) + Nederlands-Vlaams Bijbelgenootschap 2021","bb":"Het copyright berust bij stichting + BasisBijbel. Alle rechten voorbehouden.","nbg21":"De bijbeltekst in deze uitgave + is ontleend aan de NBV21 (C) Nederlands-Vlaams Bijbelgenootschap 2021"},"data":[{"ts":"2023-10-14","source":"Jakobus + 2:12","fulltext":"https:\/\/bijbel.dagelijkswoord.nl\/bijbel\/Jakobus+2%3A12?from=json","wpId":"7928","text":{"nbv":"Zorg + ervoor dat uw spreken en uw handelen de toets kunnen doorstaan van de wet + die vrijheid brengt.","nbg":"Spreekt z\u00f3 en handelt z\u00f3 als (mensen + past), die door de wet der vrijheid zullen geoordeeld worden.","nbv21":"Zorg + ervoor dat uw spreken en uw handelen de toets kunnen doorstaan van de wet, + die vrijheid brengt.","bb":"Spreek en doe dan z\u00f3, als hoort bij mensen + die door de ''wet van de vrijheid'' (dat is Jezus Christus) geoordeeld zullen + worden.","statenvertaling":"Spreekt alzo, en doet alzo, als die door de wet + der vrijheid zult geoordeeld worden.","willibrord":"Spreek en handel als mensen + die door de wet die vrijmaakt, geoordeeld zullen worden.","hsv":"Spreek z\u00f3 + en handel z\u00f3 als mensen die geoordeeld zullen worden door de wet van + de vrijheid.","naardense":"Z\u00f3 zult ge spreken en z\u00f3 zult ge doen: + als mensen die beoordeeld gaan worden door de Wet der vrijheid.","bgt":"Spreek + en leef dus zoals God het van jullie vraagt. Want hij zal jullie beoordelen. + Hij zal kijken of je geleefd hebt volgens zijn wet, die vrijheid geeft.","nbg21":"Zorg + ervoor dat uw spreken en uw handelen de toets kunnen doorstaan van de wet, + die vrijheid brengt."}},{"ts":"2023-10-13","source":"Johannes 8:31-32","fulltext":"https:\/\/bijbel.dagelijkswoord.nl\/bijbel\/Johannes+8%3A31-32?from=json","wpId":"7927","text":{"nbv":"En + tegen de Joden die in hem geloofden zei Jezus: ''Wanneer u bij mijn woord + blijft, bent u werkelijk mijn leerlingen. U zult de waarheid kennen, en de + waarheid zal u bevrijden.''","nbg":"Jezus dan zeide tot de Joden, die in Hem + geloofden: Als gij in mijn woord blijft, zijt gij waarlijk discipelen van + Mij en gij zult de waarheid verstaan, en de waarheid zal u vrijmaken.","nbv21":"En + tegen de Joden die in Hem geloofden zei Jezus: ''Wanneer u blijft vasthouden + aan wat Ik zeg, bent u werkelijk mijn leerlingen. U zult de waarheid kennen, + en de waarheid zal u bevrijden.''","bb":"Jezus zei tegen de Joden die in Hem + geloofden: Als jullie blijven geloven wat Ik zeg en doen wat Ik zeg, zijn + jullie echte leerlingen van Mij. Dan zullen jullie de waarheid gaan begrijpen, + en de waarheid zal jullie vrijmaken.","statenvertaling":"Jezus dan zeide tot + de Joden, die in Hem geloofden: Indien gijlieden in Mijn woord blijft, zo + zijt gij waarlijk Mijn discipelen; En zult de waarheid verstaan, en de waarheid + zal u vrijmaken.","willibrord":"Tegen die Joden die in Hem geloofden, zei + Jezus: ''Als u vasthoudt aan mijn woord, dan bent u werkelijk leerlingen van + Mij; dan zult u de waarheid leren kennen, en de waarheid zal u vrij maken.''","hsv":"Jezus + dan zei tegen de Joden die in Hem geloofden: Als u in Mijn woord blijft, bent + u werkelijk Mijn discipelen, en u zult de waarheid kennen, en de waarheid + zal u vrijmaken.","naardense":"Toen heeft Jezus gezegd, tot de Judee\u00ebrs + die in hem zijn gaan geloven: g\u00edj, als ge blijft bij mijn woord, zijt + ge waarlijk leerlingen van mij, en zult ge de waarheid kennen; de waarheid + zal u vrijmaken!","bgt":"Jezus zei tegen de Joden die in hem geloofden: ''Mijn + boodschap moet in jullie hart zijn. Alleen dan zijn jullie echt mijn leerlingen. + Dan zullen jullie de waarheid kennen, en daardoor zullen jullie bevrijd worden.''","nbg21":"En + tegen de Joden die in Hem geloofden zei Jezus: ''Wanneer u blijft vasthouden + aan wat Ik zeg, bent u werkelijk mijn leerlingen. U zult de waarheid kennen, + en de waarheid zal u bevrijden.''"}},{"ts":"2023-10-12","source":"Jeremia + 7:23","fulltext":"https:\/\/bijbel.dagelijkswoord.nl\/bijbel\/Jeremia+7%3A23?from=json","wpId":"7926","text":{"nbv":"Wees + mij gehoorzaam, dan zal ik jullie God zijn en zullen jullie mijn volk zijn. + Volg steeds de weg die ik jullie wijs, daar zullen jullie wel bij varen.","nbg":"Hoort + naar mijn stem, dan zal Ik u tot een God en zult gij Mij tot een volk zijn, + en wandelt op de ganse weg die Ik u gebied, opdat het u welga.","nbv21":"Wees + Mij gehoorzaam, dan zal Ik jullie God zijn en zullen jullie mijn volk zijn. + Volg steeds de weg die Ik jullie wijs, en het zal jullie goed gaan.","bb":"Luister + naar Mij en doe wat Ik zeg. Dan zal Ik jullie God zijn en zullen jullie mijn + volk zijn. Doe alles wat Ik zeg. Dan zal het goed met jullie gaan.","statenvertaling":"Maar + deze zaak heb Ik hun geboden, zeggende: Hoort naar Mijn stem, zo zal Ik u + tot een God zijn, en gij zult Mij tot een volk zijn; en wandelt in al den + weg, dien Ik u gebieden zal, opdat het u welga.","willibrord":"Dit alleen + heb Ik bevolen: Luister naar Mij, dan zal Ik uw God zijn en u zult mijn volk + zijn. Volg de weg die Ik u wijs, dan zal het goed gaan.","hsv":"Maar deze + zaak heb Ik hun geboden: Luister naar Mijn stem. Dan zal Ik u tot een God + zijn, en \u00fa zult Mij tot een volk zijn. Bewandel heel de weg die Ik u + gebieden zal en het zal u goed gaan.","naardense":"Hoort naar mijn stem, wezen + zal ik u tot God en gij zult mij tot gemeente wezen; wandelen zult ge over + heel de weg die ik u zal gebieden, opdat het u goedgaat!","bgt":"Luister altijd + naar wat ik zeg. Dan zal ik jullie God zijn, en dan zullen jullie mijn volk + zijn. Ik zal jullie vertellen hoe je moet leven. Als je doet wat ik wil, zal + het goed met jullie gaan.","nbg21":"Wees Mij gehoorzaam, dan zal Ik jullie + God zijn en zullen jullie mijn volk zijn. Volg steeds de weg die Ik jullie + wijs, en het zal jullie goed gaan."}}],"debug_info":{"worker":"work_edge","generated":"2023-10-14T04:22:30+00:00"}}' + recorded_at: Fri, 13 Oct 2023 22:00:00 GMT +recorded_with: VCR 6.1.0 From 71f27a3dda87d037343f2e1a3765587370471f2b Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:04:18 +0200 Subject: [PATCH 14/25] feat(groups_controller_spec): add filters test --- .../v1/groups_controller/index_spec.rb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/spec/requests/v1/groups_controller/index_spec.rb b/spec/requests/v1/groups_controller/index_spec.rb index e47542e0..2b1be3c3 100644 --- a/spec/requests/v1/groups_controller/index_spec.rb +++ b/spec/requests/v1/groups_controller/index_spec.rb @@ -30,5 +30,35 @@ } end end + + describe 'filters' do + include_context 'when authenticated' do + let(:user) { create(:user, user_permission_list: [record_permission]) } + end + + let(:filtered_request) do + get("#{record_url}?filter[administrative]=true") + end + + let(:administrative_group) { create(:group, administrative: true) } + let(:new_records) do + records + [administrative_group] + end + let(:expected_ids) { [administrative_group.id] } + + subject(:request) { filtered_request } + + before do + administrative_group + end + + it_behaves_like '200 OK' + + it { expect(json_object_ids).to match_array(expected_ids) } + it { expect(json_object_ids.count).to equal(1) } + it { expect(json_object_ids).to include(administrative_group.id) } + it { expect(json_object_ids).not_to include(records[0].id) } + it { expect(json_object_ids).not_to include(records[1].id) } + end end end From 7aea898867ecf2b0b07b1dba4440d48846d06cd8 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:33:44 +0200 Subject: [PATCH 15/25] refactor: improve group filters --- app/resources/v1/group_resource.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/resources/v1/group_resource.rb b/app/resources/v1/group_resource.rb index d9e91c81..119784e0 100644 --- a/app/resources/v1/group_resource.rb +++ b/app/resources/v1/group_resource.rb @@ -20,10 +20,8 @@ def description_camofied has_many :permissions filter :active, apply: ->(records, _value, _options) { records.active } - filter :kind, apply: ->(records, value, _options) { records.where(kind: value[0]) } - filter :administrative, (lambda do |records, value, _options| - records.where(administrative: value[0]) - end) + filter :kind + filter :administrative def fetchable_fields return super - [:avatar] if current_user From 5e882e9f5573a462a8e1f97d23cdba899365d85e Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:53:30 +0200 Subject: [PATCH 16/25] feat: user ical coverage --- spec/requests/v1/activities_controller/ical_spec.rb | 7 ++++++- spec/requests/v1/groups_controller/index_spec.rb | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/spec/requests/v1/activities_controller/ical_spec.rb b/spec/requests/v1/activities_controller/ical_spec.rb index 39b9eccd..5922d436 100644 --- a/spec/requests/v1/activities_controller/ical_spec.rb +++ b/spec/requests/v1/activities_controller/ical_spec.rb @@ -89,6 +89,9 @@ categories: 'algemeen,sociƫteit,vorming,invalid_cat,birthdays' }) end + let(:group) { create(:group, name: 'Leden') } + let(:membership) { create(:membership, user: user, group: group, start_date: 1.month.ago) } + let(:activity) { create(:activity, category: 'algemeen') } let(:second_activity) { create(:activity, category: 'vorming') } @@ -103,12 +106,14 @@ end before do + group + membership activity second_activity filtered_activity end - it_behaves_like '200 OK' + it { expect(ical_events.map(&:summary).to_s).to include("Verjaardag #{user.full_name}") } it { expect(ical_events.map(&:summary).to_s).to include(activity.title) } it { expect(request.body).not_to include(filtered_activity.title) } it { expect(ical_events.count).to eq 2 + birthday_users.count } diff --git a/spec/requests/v1/groups_controller/index_spec.rb b/spec/requests/v1/groups_controller/index_spec.rb index 2b1be3c3..d915566b 100644 --- a/spec/requests/v1/groups_controller/index_spec.rb +++ b/spec/requests/v1/groups_controller/index_spec.rb @@ -51,7 +51,7 @@ before do administrative_group end - + it_behaves_like '200 OK' it { expect(json_object_ids).to match_array(expected_ids) } From 214387f77e4d0bdd144727bb991b88ab321ca3c7 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:54:23 +0200 Subject: [PATCH 17/25] fix: readd it_behaves_like --- spec/requests/v1/activities_controller/ical_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/requests/v1/activities_controller/ical_spec.rb b/spec/requests/v1/activities_controller/ical_spec.rb index 5922d436..7c278a72 100644 --- a/spec/requests/v1/activities_controller/ical_spec.rb +++ b/spec/requests/v1/activities_controller/ical_spec.rb @@ -113,6 +113,7 @@ filtered_activity end + it_behaves_like '200 OK' it { expect(ical_events.map(&:summary).to_s).to include("Verjaardag #{user.full_name}") } it { expect(ical_events.map(&:summary).to_s).to include(activity.title) } it { expect(request.body).not_to include(filtered_activity.title) } From 45cf989bedddc91b68b55e4f8bb6ce5efff11fd2 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 17:00:17 +0200 Subject: [PATCH 18/25] chore: remove redundant code --- spec/requests/v1/groups_controller/index_spec.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spec/requests/v1/groups_controller/index_spec.rb b/spec/requests/v1/groups_controller/index_spec.rb index d915566b..efd5cf00 100644 --- a/spec/requests/v1/groups_controller/index_spec.rb +++ b/spec/requests/v1/groups_controller/index_spec.rb @@ -41,9 +41,6 @@ end let(:administrative_group) { create(:group, administrative: true) } - let(:new_records) do - records + [administrative_group] - end let(:expected_ids) { [administrative_group.id] } subject(:request) { filtered_request } @@ -53,7 +50,6 @@ end it_behaves_like '200 OK' - it { expect(json_object_ids).to match_array(expected_ids) } it { expect(json_object_ids.count).to equal(1) } it { expect(json_object_ids).to include(administrative_group.id) } From 01a8dc8497419d147d15794d09e38cc2c7060322 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 14 Oct 2023 20:19:36 +0200 Subject: [PATCH 19/25] refactor: try tokenless report uploading --- .github/workflows/continuous-delivery.yml | 1 - .github/workflows/continuous-integration.yml | 4 ---- 2 files changed, 5 deletions(-) diff --git a/.github/workflows/continuous-delivery.yml b/.github/workflows/continuous-delivery.yml index 497407ab..dd52674f 100644 --- a/.github/workflows/continuous-delivery.yml +++ b/.github/workflows/continuous-delivery.yml @@ -107,7 +107,6 @@ jobs: sha: ${{ needs.merge.outputs.sha }} secrets: rails_master_key: ${{ secrets.RAILS_MASTER_KEY }} - codecov_token: ${{ secrets.CODECOV_TOKEN }} publish_image: name: Publish Image diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index cc430f6f..d1d40c69 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -15,9 +15,6 @@ on: rails_master_key: description: The Rails master key required: true - codecov_token: - description: Token for uploading Codecov reports - required: true jobs: build: @@ -129,7 +126,6 @@ jobs: if: ${{ !cancelled() }} uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 with: - token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true - name: Upload coverage report artifact From 49c7eaf3efa1e8b2e440e691bd849f5e199222b6 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 4 Nov 2023 23:33:46 +0100 Subject: [PATCH 20/25] chore: comment test --- .../v1/books_controller/index_spec.rb | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/spec/requests/v1/books_controller/index_spec.rb b/spec/requests/v1/books_controller/index_spec.rb index eed9408c..200bdb31 100644 --- a/spec/requests/v1/books_controller/index_spec.rb +++ b/spec/requests/v1/books_controller/index_spec.rb @@ -43,15 +43,19 @@ it_behaves_like '200 OK' end - describe 'without subtitle' do - let(:request) do - VCR.use_cassette('retrieve_book_by_isbn_no_subtitle') do - get "#{record_url}?isbn=8713638034201" - end - end - - it_behaves_like '200 OK' - end + # Commented because the isbn_lookup using bol.com is currently broken due + # to an expired API key problem, making acquiring a cassette for this test + # not possible. Work will be done in another PR on rewriting the + # isbn_lookup to use the Google Books API. + # describe 'without subtitle' do + # let(:request) do + # VCR.use_cassette('retrieve_book_by_isbn_no_subtitle') do + # get "#{record_url}?isbn=8713638034201" + # end + # end + + # it_behaves_like '200 OK' + # end end end end From c6a7ca44f1be8abb6e0d110d892caa4a22c9f290 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 2 Mar 2024 20:14:53 +0100 Subject: [PATCH 21/25] refactor: remove irrelevant test --- .../requests/v1/books_controller/index_spec.rb | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/spec/requests/v1/books_controller/index_spec.rb b/spec/requests/v1/books_controller/index_spec.rb index bc93b6ad..51447259 100644 --- a/spec/requests/v1/books_controller/index_spec.rb +++ b/spec/requests/v1/books_controller/index_spec.rb @@ -39,23 +39,7 @@ let(:user) { create(:user, user_permission_list: [record_permission]) } end - describe 'with subtitle' do - it_behaves_like '200 OK' - end - - # Commented because the isbn_lookup using bol.com is currently broken due - # to an expired API key problem, making acquiring a cassette for this test - # not possible. Work will be done in another PR on rewriting the - # isbn_lookup to use the Google Books API. - # describe 'without subtitle' do - # let(:request) do - # VCR.use_cassette('retrieve_book_by_isbn_no_subtitle') do - # get "#{record_url}?isbn=8713638034201" - # end - # end - - # it_behaves_like '200 OK' - # end + it_behaves_like '200 OK' end end end From 3f252211b128e98863cd00a276a03eb69bcfda43 Mon Sep 17 00:00:00 2001 From: guidojw <35309288+guidojw@users.noreply.github.com> Date: Sat, 2 Mar 2024 20:28:39 +0100 Subject: [PATCH 22/25] chore: update codecov-action --- .github/workflows/continuous-integration.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index f8c7d0d7..aa57bf3d 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -12,6 +12,9 @@ on: required: false type: string secrets: + codecov_token: + description: Codecov token + required: true rails_master_key: description: The Rails master key required: true @@ -124,9 +127,10 @@ jobs: - name: Upload coverage report to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 + uses: codecov/codecov-action@54bcd8715eee62d40e33596ef5e8f0f48dbbccab # v4.1.0 with: fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage report artifact if: ${{ !cancelled() }} From b15c2f1c7dc7d733dda55a28ae65098a50678b90 Mon Sep 17 00:00:00 2001 From: lodewiges <131907615+lodewiges@users.noreply.github.com> Date: Mon, 28 Oct 2024 21:16:43 +0100 Subject: [PATCH 23/25] Update README.md Co-authored-by: Matteo Bronkhorst <32799956+DrumsnChocolate@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ed230c2..55e1a58d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Alpha AMBER API ================ [![Continuous Integration](https://github.com/csvalpha/amber-api/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/csvalpha/amber-api/actions/workflows/continuous-integration.yml) [![Continuous Delivery](https://github.com/csvalpha/amber-api/actions/workflows/continuous-delivery.yml/badge.svg)](https://github.com/csvalpha/amber-api/actions/workflows/continuous-delivery.yml) -[![codecov](https://codecov.io/github/csvalpha/amber-api/graph/badge.svg?token=FC2UFYSOON)](https://codecov.io/github/csvalpha/amber-api) +[![codecov](https://codecov.io/github/csvalpha/amber-api/graph/badge.svg)](https://codecov.io/github/csvalpha/amber-api) ## Prerequisites If you're going to run the project with Docker, you only need to install the following prerequisites: From 508777b3ea23f8fc9e2b5248ae19ed1e7970cd16 Mon Sep 17 00:00:00 2001 From: lodewiges <131907615+lodewiges@users.noreply.github.com> Date: Mon, 28 Oct 2024 21:26:01 +0100 Subject: [PATCH 24/25] Fixed lint 1/2 --- spec/requests/v1/activities_controller/ical_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/v1/activities_controller/ical_spec.rb b/spec/requests/v1/activities_controller/ical_spec.rb index 7c278a72..3e17462f 100644 --- a/spec/requests/v1/activities_controller/ical_spec.rb +++ b/spec/requests/v1/activities_controller/ical_spec.rb @@ -90,7 +90,7 @@ end let(:group) { create(:group, name: 'Leden') } - let(:membership) { create(:membership, user: user, group: group, start_date: 1.month.ago) } + let(:membership) { create(:membership, user:, group:, start_date: 1.month.ago) } let(:activity) { create(:activity, category: 'algemeen') } let(:second_activity) { create(:activity, category: 'vorming') } From fe7870206114a12b61bd759d38db0c0afe4b6242 Mon Sep 17 00:00:00 2001 From: lodewiges <131907615+lodewiges@users.noreply.github.com> Date: Mon, 28 Oct 2024 21:27:04 +0100 Subject: [PATCH 25/25] Fixed lint 2/2 --- spec/resources/v1/activity_resource_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/resources/v1/activity_resource_spec.rb b/spec/resources/v1/activity_resource_spec.rb index 477f4747..fc64a31a 100644 --- a/spec/resources/v1/activity_resource_spec.rb +++ b/spec/resources/v1/activity_resource_spec.rb @@ -46,7 +46,7 @@ let(:sort) { { 'form.respond_until' => :desc } } let(:form) { create(:form, respond_until: 1.day.from_now) } let(:other_form) { create(:form, respond_until: 2.days.from_now) } - let(:activity) { create(:activity, form: form) } + let(:activity) { create(:activity, form:) } let(:other_activity) { create(:activity, form: other_form) } before do