first commit
This commit is contained in:
89
tests/test_integrations.py
Normal file
89
tests/test_integrations.py
Normal 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
|
||||
Reference in New Issue
Block a user