feat: add valuations API endpoints for managing account reconciliations (#745)

* feat: add valuations API endpoints for managing account reconciliations

* refactor: formatting

* fix: make account extraction clearer

* feat: validation and error handling improvements

* feat: transaction

* feat: error handling

* Add API documentation LLM context

* Make it easier for people

* feat: transaction in creation

* feat: add OpenAPI spec for Valuations API

* fix: update notes validation to check for key presence

* Prevent double render

* All other docs use `apiKeyAuth`

* More `apiKeyAuth`

* Remove testing assertions from API doc specs

* fix: correct valuation entry references

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
Pere Montpeó
2026-01-30 18:54:15 +01:00
committed by GitHub
parent 02cd84568e
commit 9f5fdd4d13
16 changed files with 1014 additions and 168 deletions

View File

@@ -132,11 +132,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
response '200', 'transactions listed' do
schema '$ref' => '#/components/schemas/TransactionCollection'
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('transactions')).to be_present
expect(payload.fetch('pagination')).to include('page', 'per_page', 'total_count', 'total_pages')
end
run_test!
end
response '200', 'transactions filtered by account' do
@@ -144,10 +140,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
let(:account_id) { account.id }
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('transactions')).to be_present
end
run_test!
end
response '200', 'transactions filtered by date range' do
@@ -156,10 +149,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
let(:start_date) { (Date.current - 7.days).to_s }
let(:end_date) { Date.current.to_s }
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('transactions')).to be_present
end
run_test!
end
end
@@ -209,11 +199,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
response '201', 'transaction created' do
schema '$ref' => '#/components/schemas/Transaction'
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('name')).to eq('Test purchase')
expect(payload.fetch('account').fetch('id')).to eq(account.id)
end
run_test!
end
response '422', 'validation error - missing account_id' do
@@ -261,14 +247,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
response '200', 'transaction retrieved' do
schema '$ref' => '#/components/schemas/Transaction'
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('id')).to eq(transaction.id)
expect(payload.fetch('name')).to eq('Grocery shopping')
expect(payload.fetch('category').fetch('name')).to eq('Groceries')
expect(payload.fetch('merchant').fetch('name')).to eq('Whole Foods')
expect(payload.fetch('tags').first.fetch('name')).to eq('Essential')
end
run_test!
end
response '404', 'transaction not found' do
@@ -321,11 +300,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
response '200', 'transaction updated' do
schema '$ref' => '#/components/schemas/Transaction'
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('name')).to eq('Updated grocery shopping')
expect(payload.fetch('notes')).to eq('Weekly groceries')
end
run_test!
end
response '404', 'transaction not found' do
@@ -347,10 +322,7 @@ RSpec.describe 'API V1 Transactions', type: :request do
response '200', 'transaction deleted' do
schema '$ref' => '#/components/schemas/DeleteResponse'
run_test! do |response|
payload = JSON.parse(response.body)
expect(payload.fetch('message')).to eq('Transaction deleted successfully')
end
run_test!
end
response '404', 'transaction not found' do