This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
import pytest
|
||||
from django.contrib.auth.models import User
|
||||
from django.test import Client
|
||||
|
||||
from finance.models import Dataset, Fact, Membership, Organization
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def workspace(tmp_path, settings):
|
||||
settings.MEDIA_ROOT = tmp_path
|
||||
org = Organization.objects.create(name="Finance test")
|
||||
user = User.objects.create_user("finance-admin", password="Finance-TestPassword991!")
|
||||
member = Membership.objects.create(user=user, organization=org, role="admin")
|
||||
other_org = Organization.objects.create(name="Other organization")
|
||||
other_user = User.objects.create_user("finance-other", password="Finance-TestPassword991!")
|
||||
other_member = Membership.objects.create(user=other_user, organization=other_org, role="admin")
|
||||
mapping = {
|
||||
"sheet": "CSV",
|
||||
"header": 1,
|
||||
"columns": [
|
||||
{"index": 0, "name": "期间", "role": "period"},
|
||||
{"index": 1, "name": "科室", "role": "dimension", "key": "department"},
|
||||
{"index": 2, "name": "产品一级分类", "role": "dimension", "key": "product"},
|
||||
{"index": 3, "name": "实际收入", "role": "revenue"},
|
||||
{"index": 4, "name": "成本", "role": "cost"},
|
||||
{"index": 5, "name": "毛利贡献", "role": "gross"},
|
||||
{"index": 6, "name": "客户编码", "role": "customer"},
|
||||
{"index": 7, "name": "应收金额", "role": "list_amount"},
|
||||
],
|
||||
"roi_formula": "profit_over_cost",
|
||||
"self_operated_products": ["医疗服务"],
|
||||
}
|
||||
ds = Dataset.objects.create(
|
||||
organization=org,
|
||||
created_by=user,
|
||||
name="finance.csv",
|
||||
sha256="a" * 64,
|
||||
status="ready",
|
||||
mapping=mapping,
|
||||
periods=["2025-08", "2026-08"],
|
||||
)
|
||||
facts = [
|
||||
("2025-08", "儿科", "医疗服务", 100, 40, 60, "C1", 120),
|
||||
("2025-08", "儿科", "检查", 50, 20, 30, "C2", 60),
|
||||
("2026-08", "儿科", "医疗服务", 80, 30, 50, "C1", 100),
|
||||
("2026-08", "儿科", "医疗服务", 20, 10, 10, "C3", 25),
|
||||
("2026-08", "外科", "检查", -10, 5, -15, "C4", 0),
|
||||
]
|
||||
for index, (period, department, product, revenue, cost, gross, customer, list_amount) in enumerate(
|
||||
facts, 2
|
||||
):
|
||||
Fact.objects.create(
|
||||
dataset=ds,
|
||||
period=period,
|
||||
dimensions={"department": department, "product": product},
|
||||
revenue=revenue,
|
||||
cost=cost,
|
||||
gross=gross,
|
||||
customer=customer,
|
||||
list_amount=list_amount,
|
||||
source_row=index,
|
||||
raw=[period, department, product, revenue, cost, gross, customer, list_amount],
|
||||
)
|
||||
client = Client()
|
||||
assert client.login(username=user.username, password="Finance-TestPassword991!")
|
||||
other_client = Client()
|
||||
assert other_client.login(username=other_user.username, password="Finance-TestPassword991!")
|
||||
return ds, member, client, other_member, other_client
|
||||
Reference in New Issue
Block a user