first commit

This commit is contained in:
Mateusz Gruszczyński
2026-03-13 15:17:32 +01:00
commit 986ffb200a
91 changed files with 4423 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
from datetime import date
from io import BytesIO
from PIL import Image
from app.extensions import db
from app.models import AppSetting, Category, DocumentAttachment, Expense, User
from tests.conftest import login
def _png_bytes(color='red'):
image = Image.new('RGB', (32, 32), color=color)
buffer = BytesIO()
image.save(buffer, format='PNG')
buffer.seek(0)
return buffer
def test_manifest_and_service_worker(client):
manifest = client.get('/manifest.json')
assert manifest.status_code == 200
assert manifest.get_json()['display'] == 'standalone'
sw = client.get('/service-worker.js')
assert sw.status_code == 200
assert b'skipWaiting' in sw.data
def test_webhook_creates_expense(client, app):
with app.app_context():
AppSetting.set('webhook_api_token', 'secret123')
db.session.commit()
category = Category.query.first()
response = client.post(
'/api/webhooks/expenses',
json={
'user_email': 'user@test.com',
'title': 'Webhook Lunch',
'amount': '25.50',
'currency': 'PLN',
'purchase_date': '2026-03-10',
'category_key': category.key,
},
headers={'X-Webhook-Token': 'secret123'},
)
assert response.status_code == 200
with app.app_context():
expense = Expense.query.filter_by(title='Webhook Lunch').first()
assert expense is not None
assert float(expense.amount) == 25.5
def test_multiple_attachments_saved(logged_user, app):
with app.app_context():
category = Category.query.first()
data = {
'title': 'Multi doc expense',
'amount': '12.34',
'purchase_date': '2026-03-12',
'category_id': str(category.id),
'payment_method': 'card',
'vendor': 'Vendor',
'description': 'Desc',
'currency': 'PLN',
'tags': 'tag1',
'recurring_period': 'none',
'status': 'confirmed',
'rotate': '0',
'scale_percent': '100',
'document': [(_png_bytes('red'), 'one.png'), (_png_bytes('blue'), 'two.png')],
}
response = logged_user.post('/expenses/create', data=data, content_type='multipart/form-data', follow_redirects=True)
assert response.status_code == 200
with app.app_context():
expense = Expense.query.filter_by(vendor='Vendor').order_by(Expense.id.desc()).first()
assert expense is not None
assert expense.title == 'Multi doc expense'
assert len(expense.attachments) == 2
assert DocumentAttachment.query.count() >= 2
def test_manual_report_run_from_admin(logged_admin, app):
with app.app_context():
user = User.query.filter_by(email='user@test.com').first()
user.report_frequency = 'monthly'
db.session.add(Expense(user_id=user.id, title='Report item', amount=9, currency='PLN', purchase_date=date.today(), payment_method='card'))
db.session.commit()
response = logged_admin.post('/admin/run-reports', follow_redirects=True)
assert response.status_code == 200
assert b'Queued/sent reports' in response.data