remove .value (#26633)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
Asuka Minato
2025-10-11 10:08:29 +09:00
committed by GitHub
parent bb6a331490
commit 1bd621f819
138 changed files with 613 additions and 633 deletions

View File

@@ -25,7 +25,7 @@ class TestChatMessageApiPermissions:
"""Create a mock App model for testing."""
app = App()
app.id = str(uuid.uuid4())
app.mode = AppMode.CHAT.value
app.mode = AppMode.CHAT
app.tenant_id = str(uuid.uuid4())
app.status = "normal"
return app

View File

@@ -23,7 +23,7 @@ class TestModelConfigResourcePermissions:
"""Create a mock App model for testing."""
app = App()
app.id = str(uuid.uuid4())
app.mode = AppMode.CHAT.value
app.mode = AppMode.CHAT
app.tenant_id = str(uuid.uuid4())
app.status = "normal"
app.app_model_config_id = str(uuid.uuid4())

View File

@@ -542,7 +542,7 @@ class TestWorkflowDraftVariableServiceResetVariable(unittest.TestCase):
index=1,
node_execution_id=str(uuid.uuid4()),
node_id=self._node_id,
node_type=NodeType.LLM.value,
node_type=NodeType.LLM,
title="Test Node",
inputs='{"input": "test input"}',
process_data='{"test_var": "process_value", "other_var": "other_process"}',

View File

@@ -44,25 +44,25 @@ class MockClient:
"hits": [
{
"_source": {
Field.CONTENT_KEY.value: "abcdef",
Field.VECTOR.value: [1, 2],
Field.METADATA_KEY.value: {},
Field.CONTENT_KEY: "abcdef",
Field.VECTOR: [1, 2],
Field.METADATA_KEY: {},
},
"_score": 1.0,
},
{
"_source": {
Field.CONTENT_KEY.value: "123456",
Field.VECTOR.value: [2, 2],
Field.METADATA_KEY.value: {},
Field.CONTENT_KEY: "123456",
Field.VECTOR: [2, 2],
Field.METADATA_KEY: {},
},
"_score": 0.9,
},
{
"_source": {
Field.CONTENT_KEY.value: "a1b2c3",
Field.VECTOR.value: [3, 2],
Field.METADATA_KEY.value: {},
Field.CONTENT_KEY: "a1b2c3",
Field.VECTOR: [3, 2],
Field.METADATA_KEY: {},
},
"_score": 0.8,
},

View File

@@ -40,13 +40,13 @@ class MockVikingDBClass:
collection_name=collection_name,
description="Collection For Dify",
viking_db_service=self._viking_db_service,
primary_key=vdb_Field.PRIMARY_KEY.value,
primary_key=vdb_Field.PRIMARY_KEY,
fields=[
Field(field_name=vdb_Field.PRIMARY_KEY.value, field_type=FieldType.String, is_primary_key=True),
Field(field_name=vdb_Field.METADATA_KEY.value, field_type=FieldType.String),
Field(field_name=vdb_Field.GROUP_KEY.value, field_type=FieldType.String),
Field(field_name=vdb_Field.CONTENT_KEY.value, field_type=FieldType.Text),
Field(field_name=vdb_Field.VECTOR.value, field_type=FieldType.Vector, dim=768),
Field(field_name=vdb_Field.PRIMARY_KEY, field_type=FieldType.String, is_primary_key=True),
Field(field_name=vdb_Field.METADATA_KEY, field_type=FieldType.String),
Field(field_name=vdb_Field.GROUP_KEY, field_type=FieldType.String),
Field(field_name=vdb_Field.CONTENT_KEY, field_type=FieldType.Text),
Field(field_name=vdb_Field.VECTOR, field_type=FieldType.Vector, dim=768),
],
indexes=[
Index(
@@ -71,7 +71,7 @@ class MockVikingDBClass:
return Collection(
collection_name=collection_name,
description=description,
primary_key=vdb_Field.PRIMARY_KEY.value,
primary_key=vdb_Field.PRIMARY_KEY,
viking_db_service=self._viking_db_service,
fields=fields,
)
@@ -126,11 +126,11 @@ class MockVikingDBClass:
def fetch_data(self, id: Union[str, list[str], int, list[int]]):
return Data(
fields={
vdb_Field.GROUP_KEY.value: "test_group",
vdb_Field.METADATA_KEY.value: "{}",
vdb_Field.CONTENT_KEY.value: "content",
vdb_Field.PRIMARY_KEY.value: id,
vdb_Field.VECTOR.value: [-0.00762577411336441, -0.01949881482151406, 0.008832383941428398],
vdb_Field.GROUP_KEY: "test_group",
vdb_Field.METADATA_KEY: "{}",
vdb_Field.CONTENT_KEY: "content",
vdb_Field.PRIMARY_KEY: id,
vdb_Field.VECTOR: [-0.00762577411336441, -0.01949881482151406, 0.008832383941428398],
},
id=id,
)
@@ -151,16 +151,16 @@ class MockVikingDBClass:
return [
Data(
fields={
vdb_Field.GROUP_KEY.value: "test_group",
vdb_Field.METADATA_KEY.value: '\
vdb_Field.GROUP_KEY: "test_group",
vdb_Field.METADATA_KEY: '\
{"source": "/var/folders/ml/xxx/xxx.txt", \
"document_id": "test_document_id", \
"dataset_id": "test_dataset_id", \
"doc_id": "test_id", \
"doc_hash": "test_hash"}',
vdb_Field.CONTENT_KEY.value: "content",
vdb_Field.PRIMARY_KEY.value: "test_id",
vdb_Field.VECTOR.value: vector,
vdb_Field.CONTENT_KEY: "content",
vdb_Field.PRIMARY_KEY: "test_id",
vdb_Field.VECTOR: vector,
},
id="test_id",
score=0.10,
@@ -173,16 +173,16 @@ class MockVikingDBClass:
return [
Data(
fields={
vdb_Field.GROUP_KEY.value: "test_group",
vdb_Field.METADATA_KEY.value: '\
vdb_Field.GROUP_KEY: "test_group",
vdb_Field.METADATA_KEY: '\
{"source": "/var/folders/ml/xxx/xxx.txt", \
"document_id": "test_document_id", \
"dataset_id": "test_dataset_id", \
"doc_id": "test_id", \
"doc_hash": "test_hash"}',
vdb_Field.CONTENT_KEY.value: "content",
vdb_Field.PRIMARY_KEY.value: "test_id",
vdb_Field.VECTOR.value: [-0.00762577411336441, -0.01949881482151406, 0.008832383941428398],
vdb_Field.CONTENT_KEY: "content",
vdb_Field.PRIMARY_KEY: "test_id",
vdb_Field.VECTOR: [-0.00762577411336441, -0.01949881482151406, 0.008832383941428398],
},
id="test_id",
score=0.10,

View File

@@ -129,8 +129,8 @@ class TestOpenSearchVector:
"hits": [
{
"_source": {
Field.CONTENT_KEY.value: get_example_text(),
Field.METADATA_KEY.value: {"document_id": self.example_doc_id},
Field.CONTENT_KEY: get_example_text(),
Field.METADATA_KEY: {"document_id": self.example_doc_id},
},
"_score": 1.0,
}

View File

@@ -64,7 +64,7 @@ class TestAccountService:
password=password,
)
assert account.email == email
assert account.status == AccountStatus.ACTIVE.value
assert account.status == AccountStatus.ACTIVE
# Login with correct password
logged_in = AccountService.authenticate(email, password)
@@ -185,7 +185,7 @@ class TestAccountService:
)
# Ban the account
account.status = AccountStatus.BANNED.value
account.status = AccountStatus.BANNED
from extensions.ext_database import db
db.session.commit()
@@ -269,14 +269,14 @@ class TestAccountService:
interface_language="en-US",
password=password,
)
account.status = AccountStatus.PENDING.value
account.status = AccountStatus.PENDING
from extensions.ext_database import db
db.session.commit()
# Authenticate should activate the account
authenticated_account = AccountService.authenticate(email, password)
assert authenticated_account.status == AccountStatus.ACTIVE.value
assert authenticated_account.status == AccountStatus.ACTIVE
assert authenticated_account.initialized_at is not None
def test_update_account_password_success(self, db_session_with_containers, mock_external_service_dependencies):
@@ -539,7 +539,7 @@ class TestAccountService:
from extensions.ext_database import db
db.session.refresh(account)
assert account.status == AccountStatus.CLOSED.value
assert account.status == AccountStatus.CLOSED
def test_update_account_fields(self, db_session_with_containers, mock_external_service_dependencies):
"""
@@ -679,7 +679,7 @@ class TestAccountService:
interface_language="en-US",
password=password,
)
account.status = AccountStatus.PENDING.value
account.status = AccountStatus.PENDING
from extensions.ext_database import db
db.session.commit()
@@ -688,7 +688,7 @@ class TestAccountService:
token_pair = AccountService.login(account)
db.session.refresh(account)
assert account.status == AccountStatus.ACTIVE.value
assert account.status == AccountStatus.ACTIVE
def test_logout(self, db_session_with_containers, mock_external_service_dependencies):
"""
@@ -860,7 +860,7 @@ class TestAccountService:
)
# Ban the account
account.status = AccountStatus.BANNED.value
account.status = AccountStatus.BANNED
from extensions.ext_database import db
db.session.commit()
@@ -990,7 +990,7 @@ class TestAccountService:
)
# Ban the account
account.status = AccountStatus.BANNED.value
account.status = AccountStatus.BANNED
from extensions.ext_database import db
db.session.commit()

View File

@@ -86,7 +86,7 @@ class TestFileService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)
@@ -187,7 +187,7 @@ class TestFileService:
assert upload_file.extension == "pdf"
assert upload_file.mime_type == mimetype
assert upload_file.created_by == account.id
assert upload_file.created_by_role == CreatorUserRole.ACCOUNT.value
assert upload_file.created_by_role == CreatorUserRole.ACCOUNT
assert upload_file.used is False
assert upload_file.hash == hashlib.sha3_256(content).hexdigest()
@@ -216,7 +216,7 @@ class TestFileService:
assert upload_file is not None
assert upload_file.created_by == end_user.id
assert upload_file.created_by_role == CreatorUserRole.END_USER.value
assert upload_file.created_by_role == CreatorUserRole.END_USER
def test_upload_file_with_datasets_source(
self, db_session_with_containers, engine, mock_external_service_dependencies

View File

@@ -72,7 +72,7 @@ class TestMetadataService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -103,7 +103,7 @@ class TestModelLoadBalancingService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -67,7 +67,7 @@ class TestModelProviderService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -66,7 +66,7 @@ class TestTagService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -144,7 +144,7 @@ class TestWebConversationService:
system_instruction=fake.text(max_nb_chars=300),
system_instruction_tokens=50,
status="normal",
invoke_from=InvokeFrom.WEB_APP.value,
invoke_from=InvokeFrom.WEB_APP,
from_source="console" if isinstance(user, Account) else "api",
from_end_user_id=user.id if isinstance(user, EndUser) else None,
from_account_id=user.id if isinstance(user, Account) else None,

View File

@@ -87,7 +87,7 @@ class TestWebAppAuthService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)
@@ -150,7 +150,7 @@ class TestWebAppAuthService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)
@@ -232,7 +232,7 @@ class TestWebAppAuthService:
assert result.id == account.id
assert result.email == account.email
assert result.name == account.name
assert result.status == AccountStatus.ACTIVE.value
assert result.status == AccountStatus.ACTIVE
# Verify database state
from extensions.ext_database import db
@@ -280,7 +280,7 @@ class TestWebAppAuthService:
email=fake.email(),
name=fake.name(),
interface_language="en-US",
status=AccountStatus.BANNED.value,
status=AccountStatus.BANNED,
)
# Hash password
@@ -411,7 +411,7 @@ class TestWebAppAuthService:
assert result.id == account.id
assert result.email == account.email
assert result.name == account.name
assert result.status == AccountStatus.ACTIVE.value
assert result.status == AccountStatus.ACTIVE
# Verify database state
from extensions.ext_database import db
@@ -455,7 +455,7 @@ class TestWebAppAuthService:
email=unique_email,
name=fake.name(),
interface_language="en-US",
status=AccountStatus.BANNED.value,
status=AccountStatus.BANNED,
)
from extensions.ext_database import db

View File

@@ -199,7 +199,7 @@ class TestWorkflowAppService:
elapsed_time=1.5,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
finished_at=datetime.now(UTC),
@@ -215,7 +215,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
)
@@ -356,7 +356,7 @@ class TestWorkflowAppService:
elapsed_time=1.0 + i,
total_tokens=100 + i * 10,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
finished_at=datetime.now(UTC) + timedelta(minutes=i + 1) if status != "running" else None,
@@ -371,7 +371,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
)
@@ -464,7 +464,7 @@ class TestWorkflowAppService:
elapsed_time=1.0,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=timestamp,
finished_at=timestamp + timedelta(minutes=1),
@@ -479,7 +479,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=timestamp,
)
@@ -571,7 +571,7 @@ class TestWorkflowAppService:
elapsed_time=1.0,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
finished_at=datetime.now(UTC) + timedelta(minutes=i + 1),
@@ -586,7 +586,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
)
@@ -701,7 +701,7 @@ class TestWorkflowAppService:
elapsed_time=1.0,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
finished_at=datetime.now(UTC) + timedelta(minutes=i + 1),
@@ -716,7 +716,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
)
@@ -743,7 +743,7 @@ class TestWorkflowAppService:
elapsed_time=1.0,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.END_USER.value,
created_by_role=CreatorUserRole.END_USER,
created_by=end_user.id,
created_at=datetime.now(UTC) + timedelta(minutes=i + 10),
finished_at=datetime.now(UTC) + timedelta(minutes=i + 11),
@@ -758,7 +758,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="web-app",
created_by_role=CreatorUserRole.END_USER.value,
created_by_role=CreatorUserRole.END_USER,
created_by=end_user.id,
created_at=datetime.now(UTC) + timedelta(minutes=i + 10),
)
@@ -780,14 +780,14 @@ class TestWorkflowAppService:
limit=20,
)
assert result_session_filter["total"] == 2
assert all(log.created_by_role == CreatorUserRole.END_USER.value for log in result_session_filter["data"])
assert all(log.created_by_role == CreatorUserRole.END_USER for log in result_session_filter["data"])
# Test filtering by account email
result_account_filter = service.get_paginate_workflow_app_logs(
session=db_session_with_containers, app_model=app, created_by_account=account.email, page=1, limit=20
)
assert result_account_filter["total"] == 3
assert all(log.created_by_role == CreatorUserRole.ACCOUNT.value for log in result_account_filter["data"])
assert all(log.created_by_role == CreatorUserRole.ACCOUNT for log in result_account_filter["data"])
# Test filtering by non-existent session ID
result_no_session = service.get_paginate_workflow_app_logs(
@@ -853,7 +853,7 @@ class TestWorkflowAppService:
elapsed_time=1.0,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
finished_at=datetime.now(UTC) + timedelta(minutes=1),
@@ -869,7 +869,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
)
@@ -943,7 +943,7 @@ class TestWorkflowAppService:
elapsed_time=0.0, # Edge case: 0 elapsed time
total_tokens=0, # Edge case: 0 tokens
total_steps=0, # Edge case: 0 steps
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
finished_at=datetime.now(UTC),
@@ -959,7 +959,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
)
@@ -1098,7 +1098,7 @@ class TestWorkflowAppService:
elapsed_time=1.5,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
finished_at=datetime.now(UTC) + timedelta(minutes=i + 1) if status == "succeeded" else None,
@@ -1113,7 +1113,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
)
@@ -1198,7 +1198,7 @@ class TestWorkflowAppService:
elapsed_time=1.5,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
finished_at=datetime.now(UTC) + timedelta(minutes=i + 1) if status != "running" else None,
@@ -1213,7 +1213,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i),
)
@@ -1300,7 +1300,7 @@ class TestWorkflowAppService:
elapsed_time=1.5,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i * 10 + j),
finished_at=datetime.now(UTC) + timedelta(minutes=i * 10 + j + 1),
@@ -1315,7 +1315,7 @@ class TestWorkflowAppService:
workflow_id=workflow.id,
workflow_run_id=workflow_run.id,
created_from="service-api",
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC) + timedelta(minutes=i * 10 + j),
)

View File

@@ -130,7 +130,7 @@ class TestWorkflowRunService:
elapsed_time=1.5,
total_tokens=100,
total_steps=3,
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=created_time,
finished_at=created_time,
@@ -167,7 +167,7 @@ class TestWorkflowRunService:
inputs={},
status="normal",
mode="chat",
from_source=CreatorUserRole.ACCOUNT.value,
from_source=CreatorUserRole.ACCOUNT,
from_account_id=account.id,
)
db.session.add(conversation)
@@ -188,7 +188,7 @@ class TestWorkflowRunService:
message.answer_price_unit = 0.001
message.currency = "USD"
message.status = "normal"
message.from_source = CreatorUserRole.ACCOUNT.value
message.from_source = CreatorUserRole.ACCOUNT
message.from_account_id = account.id
message.workflow_run_id = workflow_run.id
message.inputs = {"input": "test input"}
@@ -458,7 +458,7 @@ class TestWorkflowRunService:
status="succeeded",
elapsed_time=0.5,
execution_metadata=json.dumps({"tokens": 50}),
created_by_role=CreatorUserRole.ACCOUNT.value,
created_by_role=CreatorUserRole.ACCOUNT,
created_by=account.id,
created_at=datetime.now(UTC),
)
@@ -689,7 +689,7 @@ class TestWorkflowRunService:
status="succeeded",
elapsed_time=0.5,
execution_metadata=json.dumps({"tokens": 50}),
created_by_role=CreatorUserRole.END_USER.value,
created_by_role=CreatorUserRole.END_USER,
created_by=end_user.id,
created_at=datetime.now(UTC),
)
@@ -710,4 +710,4 @@ class TestWorkflowRunService:
assert node_exec.app_id == app.id
assert node_exec.workflow_run_id == workflow_run.id
assert node_exec.created_by == end_user.id
assert node_exec.created_by_role == CreatorUserRole.END_USER.value
assert node_exec.created_by_role == CreatorUserRole.END_USER

View File

@@ -130,7 +130,7 @@ class TestWorkflowService:
id=fake.uuid4(),
tenant_id=app.tenant_id,
app_id=app.id,
type=WorkflowType.WORKFLOW.value,
type=WorkflowType.WORKFLOW,
version=Workflow.VERSION_DRAFT,
graph=json.dumps({"nodes": [], "edges": []}),
features=json.dumps({"features": []}),
@@ -176,7 +176,7 @@ class TestWorkflowService:
node_execution.node_type = "test_node"
node_execution.title = "Test Node" # Required field
node_execution.status = "succeeded"
node_execution.created_by_role = CreatorUserRole.ACCOUNT.value # Required field
node_execution.created_by_role = CreatorUserRole.ACCOUNT # Required field
node_execution.created_by = account.id # Required field
node_execution.created_at = fake.date_time_this_year()

View File

@@ -69,7 +69,7 @@ class TestWorkspaceService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)
@@ -111,7 +111,7 @@ class TestWorkspaceService:
assert result["name"] == tenant.name
assert result["plan"] == tenant.plan
assert result["status"] == tenant.status
assert result["role"] == TenantAccountRole.OWNER.value
assert result["role"] == TenantAccountRole.OWNER
assert result["created_at"] == tenant.created_at
assert result["trial_end_reason"] is None
@@ -159,7 +159,7 @@ class TestWorkspaceService:
assert result["name"] == tenant.name
assert result["plan"] == tenant.plan
assert result["status"] == tenant.status
assert result["role"] == TenantAccountRole.OWNER.value
assert result["role"] == TenantAccountRole.OWNER
assert result["created_at"] == tenant.created_at
assert result["trial_end_reason"] is None
@@ -194,7 +194,7 @@ class TestWorkspaceService:
from extensions.ext_database import db
join = db.session.query(TenantAccountJoin).filter_by(tenant_id=tenant.id, account_id=account.id).first()
join.role = TenantAccountRole.NORMAL.value
join.role = TenantAccountRole.NORMAL
db.session.commit()
# Setup mocks for feature service
@@ -212,7 +212,7 @@ class TestWorkspaceService:
assert result["name"] == tenant.name
assert result["plan"] == tenant.plan
assert result["status"] == tenant.status
assert result["role"] == TenantAccountRole.NORMAL.value
assert result["role"] == TenantAccountRole.NORMAL
assert result["created_at"] == tenant.created_at
assert result["trial_end_reason"] is None
@@ -245,7 +245,7 @@ class TestWorkspaceService:
from extensions.ext_database import db
join = db.session.query(TenantAccountJoin).filter_by(tenant_id=tenant.id, account_id=account.id).first()
join.role = TenantAccountRole.ADMIN.value
join.role = TenantAccountRole.ADMIN
db.session.commit()
# Setup mocks for feature service and tenant service
@@ -260,7 +260,7 @@ class TestWorkspaceService:
# Assert: Verify the expected outcomes
assert result is not None
assert result["role"] == TenantAccountRole.ADMIN.value
assert result["role"] == TenantAccountRole.ADMIN
# Verify custom config is included for admin users
assert "custom_config" in result
@@ -378,7 +378,7 @@ class TestWorkspaceService:
from extensions.ext_database import db
join = db.session.query(TenantAccountJoin).filter_by(tenant_id=tenant.id, account_id=account.id).first()
join.role = TenantAccountRole.EDITOR.value
join.role = TenantAccountRole.EDITOR
db.session.commit()
# Setup mocks for feature service and tenant service
@@ -394,7 +394,7 @@ class TestWorkspaceService:
# Assert: Verify the expected outcomes
assert result is not None
assert result["role"] == TenantAccountRole.EDITOR.value
assert result["role"] == TenantAccountRole.EDITOR
# Verify custom config is not included for editor users without admin privileges
assert "custom_config" not in result
@@ -425,7 +425,7 @@ class TestWorkspaceService:
from extensions.ext_database import db
join = db.session.query(TenantAccountJoin).filter_by(tenant_id=tenant.id, account_id=account.id).first()
join.role = TenantAccountRole.DATASET_OPERATOR.value
join.role = TenantAccountRole.DATASET_OPERATOR
db.session.commit()
# Setup mocks for feature service and tenant service
@@ -441,7 +441,7 @@ class TestWorkspaceService:
# Assert: Verify the expected outcomes
assert result is not None
assert result["role"] == TenantAccountRole.DATASET_OPERATOR.value
assert result["role"] == TenantAccountRole.DATASET_OPERATOR
# Verify custom config is not included for dataset operators without admin privileges
assert "custom_config" not in result

View File

@@ -72,7 +72,7 @@ class TestApiToolManageService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -72,7 +72,7 @@ class TestMCPToolManageService:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -168,7 +168,7 @@ class TestToolTransformService:
"""
# Arrange: Setup test data
fake = Faker()
provider_type = ToolProviderType.BUILT_IN.value
provider_type = ToolProviderType.BUILT_IN
provider_name = fake.company()
icon = "🔧"
@@ -206,7 +206,7 @@ class TestToolTransformService:
"""
# Arrange: Setup test data
fake = Faker()
provider_type = ToolProviderType.API.value
provider_type = ToolProviderType.API
provider_name = fake.company()
icon = '{"background": "#FF6B6B", "content": "🔧"}'
@@ -231,7 +231,7 @@ class TestToolTransformService:
"""
# Arrange: Setup test data with invalid JSON
fake = Faker()
provider_type = ToolProviderType.API.value
provider_type = ToolProviderType.API
provider_name = fake.company()
icon = '{"invalid": json}'
@@ -257,7 +257,7 @@ class TestToolTransformService:
"""
# Arrange: Setup test data
fake = Faker()
provider_type = ToolProviderType.WORKFLOW.value
provider_type = ToolProviderType.WORKFLOW
provider_name = fake.company()
icon = {"background": "#FF6B6B", "content": "🔧"}
@@ -282,7 +282,7 @@ class TestToolTransformService:
"""
# Arrange: Setup test data
fake = Faker()
provider_type = ToolProviderType.MCP.value
provider_type = ToolProviderType.MCP
provider_name = fake.company()
icon = {"background": "#FF6B6B", "content": "🔧"}
@@ -329,7 +329,7 @@ class TestToolTransformService:
# Arrange: Setup test data
fake = Faker()
tenant_id = fake.uuid4()
provider = {"type": ToolProviderType.BUILT_IN.value, "name": fake.company(), "icon": "🔧"}
provider = {"type": ToolProviderType.BUILT_IN, "name": fake.company(), "icon": "🔧"}
# Act: Execute the method under test
ToolTransformService.repack_provider(tenant_id, provider)

View File

@@ -66,7 +66,7 @@ class TestWorkflowConverter:
mock_config.model = ModelConfigEntity(
provider="openai",
model="gpt-4",
mode=LLMMode.CHAT.value,
mode=LLMMode.CHAT,
parameters={},
stop=[],
)
@@ -120,7 +120,7 @@ class TestWorkflowConverter:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)
@@ -150,7 +150,7 @@ class TestWorkflowConverter:
app = App(
tenant_id=tenant.id,
name=fake.company(),
mode=AppMode.CHAT.value,
mode=AppMode.CHAT,
icon_type="emoji",
icon="🤖",
icon_background="#FF6B6B",
@@ -218,7 +218,7 @@ class TestWorkflowConverter:
# Assert: Verify the expected outcomes
assert new_app is not None
assert new_app.name == "Test Workflow App"
assert new_app.mode == AppMode.ADVANCED_CHAT.value
assert new_app.mode == AppMode.ADVANCED_CHAT
assert new_app.icon_type == "emoji"
assert new_app.icon == "🚀"
assert new_app.icon_background == "#4CAF50"
@@ -257,7 +257,7 @@ class TestWorkflowConverter:
app = App(
tenant_id=tenant.id,
name=fake.company(),
mode=AppMode.CHAT.value,
mode=AppMode.CHAT,
icon_type="emoji",
icon="🤖",
icon_background="#FF6B6B",
@@ -522,7 +522,7 @@ class TestWorkflowConverter:
model_config = ModelConfigEntity(
provider="openai",
model="gpt-4",
mode=LLMMode.CHAT.value,
mode=LLMMode.CHAT,
parameters={"temperature": 0.7},
stop=[],
)

View File

@@ -63,7 +63,7 @@ class TestAddDocumentToIndexTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -84,7 +84,7 @@ class TestBatchCleanDocumentTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -112,7 +112,7 @@ class TestBatchCreateSegmentToIndexTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -91,7 +91,7 @@ class TestCreateSegmentToIndexTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -69,7 +69,7 @@ class TestDisableSegmentFromIndexTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -72,7 +72,7 @@ class TestDocumentIndexingTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)
@@ -154,7 +154,7 @@ class TestDocumentIndexingTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -63,7 +63,7 @@ class TestEnableSegmentsToIndexTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -66,7 +66,7 @@ class TestMailAccountDeletionTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db.session.add(join)

View File

@@ -65,7 +65,7 @@ class TestMailChangeMailTask:
join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
current=True,
)
db_session_with_containers.add(join)

View File

@@ -95,7 +95,7 @@ class TestMailInviteMemberTask:
name=fake.name(),
password=fake.password(),
interface_language="en-US",
status=AccountStatus.ACTIVE.value,
status=AccountStatus.ACTIVE,
)
account.created_at = datetime.now(UTC)
account.updated_at = datetime.now(UTC)
@@ -117,7 +117,7 @@ class TestMailInviteMemberTask:
tenant_join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.OWNER.value,
role=TenantAccountRole.OWNER,
)
tenant_join.created_at = datetime.now(UTC)
db_session_with_containers.add(tenant_join)
@@ -163,7 +163,7 @@ class TestMailInviteMemberTask:
name=email.split("@")[0],
password="",
interface_language="en-US",
status=AccountStatus.PENDING.value,
status=AccountStatus.PENDING,
)
account.created_at = datetime.now(UTC)
@@ -176,7 +176,7 @@ class TestMailInviteMemberTask:
tenant_join = TenantAccountJoin(
tenant_id=tenant.id,
account_id=account.id,
role=TenantAccountRole.NORMAL.value,
role=TenantAccountRole.NORMAL,
)
tenant_join.created_at = datetime.now(UTC)
db_session_with_containers.add(tenant_join)
@@ -486,7 +486,7 @@ class TestMailInviteMemberTask:
db_session_with_containers.refresh(pending_account)
db_session_with_containers.refresh(tenant)
assert pending_account.status == AccountStatus.PENDING.value
assert pending_account.status == AccountStatus.PENDING
assert pending_account.email == invitee_email
assert tenant.name is not None
@@ -497,7 +497,7 @@ class TestMailInviteMemberTask:
.first()
)
assert tenant_join is not None
assert tenant_join.role == TenantAccountRole.NORMAL.value
assert tenant_join.role == TenantAccountRole.NORMAL
def test_send_invite_member_mail_token_lifecycle_management(
self, db_session_with_containers, mock_external_service_dependencies

View File

@@ -143,7 +143,7 @@ class TestOAuthCallback:
oauth_provider.get_user_info.return_value = OAuthUserInfo(id="123", name="Test User", email="test@example.com")
account = MagicMock()
account.status = AccountStatus.ACTIVE.value
account.status = AccountStatus.ACTIVE
token_pair = MagicMock()
token_pair.access_token = "jwt_access_token"
@@ -220,11 +220,11 @@ class TestOAuthCallback:
@pytest.mark.parametrize(
("account_status", "expected_redirect"),
[
(AccountStatus.BANNED.value, "http://localhost:3000/signin?message=Account is banned."),
(AccountStatus.BANNED, "http://localhost:3000/signin?message=Account is banned."),
# CLOSED status: Currently NOT handled, will proceed to login (security issue)
# This documents actual behavior. See test_defensive_check_for_closed_account_status for details
(
AccountStatus.CLOSED.value,
AccountStatus.CLOSED,
"http://localhost:3000?access_token=jwt_access_token&refresh_token=jwt_refresh_token",
),
],
@@ -296,13 +296,13 @@ class TestOAuthCallback:
mock_get_providers.return_value = {"github": oauth_setup["provider"]}
mock_account = MagicMock()
mock_account.status = AccountStatus.PENDING.value
mock_account.status = AccountStatus.PENDING
mock_generate_account.return_value = mock_account
with app.test_request_context("/auth/oauth/github/callback?code=test_code"):
resource.get("github")
assert mock_account.status == AccountStatus.ACTIVE.value
assert mock_account.status == AccountStatus.ACTIVE
assert mock_account.initialized_at is not None
mock_db.session.commit.assert_called_once()
@@ -352,7 +352,7 @@ class TestOAuthCallback:
# Create account with CLOSED status
closed_account = MagicMock()
closed_account.status = AccountStatus.CLOSED.value
closed_account.status = AccountStatus.CLOSED
closed_account.id = "123"
closed_account.name = "Closed Account"
mock_generate_account.return_value = closed_account

View File

@@ -140,7 +140,7 @@ class TestCeleryWorkflowExecutionRepository:
assert call_args["execution_data"] == sample_workflow_execution.model_dump()
assert call_args["tenant_id"] == mock_account.current_tenant_id
assert call_args["app_id"] == "test-app"
assert call_args["triggered_from"] == WorkflowRunTriggeredFrom.APP_RUN.value
assert call_args["triggered_from"] == WorkflowRunTriggeredFrom.APP_RUN
assert call_args["creator_user_id"] == mock_account.id
# Verify no task tracking occurs (no _pending_saves attribute)

View File

@@ -149,7 +149,7 @@ class TestCeleryWorkflowNodeExecutionRepository:
assert call_args["execution_data"] == sample_workflow_node_execution.model_dump()
assert call_args["tenant_id"] == mock_account.current_tenant_id
assert call_args["app_id"] == "test-app"
assert call_args["triggered_from"] == WorkflowNodeExecutionTriggeredFrom.WORKFLOW_RUN.value
assert call_args["triggered_from"] == WorkflowNodeExecutionTriggeredFrom.WORKFLOW_RUN
assert call_args["creator_user_id"] == mock_account.id
# Verify execution is cached

View File

@@ -145,12 +145,12 @@ class TestSQLAlchemyWorkflowNodeExecutionRepositoryTruncation:
db_model.index = 1
db_model.predecessor_node_id = None
db_model.node_id = "node-id"
db_model.node_type = NodeType.LLM.value
db_model.node_type = NodeType.LLM
db_model.title = "Test Node"
db_model.inputs = json.dumps({"value": "inputs"})
db_model.process_data = json.dumps({"value": "process_data"})
db_model.outputs = json.dumps({"value": "outputs"})
db_model.status = WorkflowNodeExecutionStatus.SUCCEEDED.value
db_model.status = WorkflowNodeExecutionStatus.SUCCEEDED
db_model.error = None
db_model.elapsed_time = 1.0
db_model.execution_metadata = "{}"

View File

@@ -147,7 +147,7 @@ class TestRedisChannel:
"""Test deserializing an abort command."""
channel = RedisChannel(MagicMock(), "test:key")
abort_data = {"command_type": CommandType.ABORT.value}
abort_data = {"command_type": CommandType.ABORT}
command = channel._deserialize_command(abort_data)
assert isinstance(command, AbortCommand)
@@ -158,7 +158,7 @@ class TestRedisChannel:
channel = RedisChannel(MagicMock(), "test:key")
# For now, only ABORT is supported, but test generic handling
generic_data = {"command_type": CommandType.ABORT.value}
generic_data = {"command_type": CommandType.ABORT}
command = channel._deserialize_command(generic_data)
assert command is not None

View File

@@ -56,8 +56,8 @@ def test_mock_iteration_node_preserves_config():
workflow_id="test",
graph_config={"nodes": [], "edges": []},
user_id="test",
user_from=UserFrom.ACCOUNT.value,
invoke_from=InvokeFrom.SERVICE_API.value,
user_from=UserFrom.ACCOUNT,
invoke_from=InvokeFrom.SERVICE_API,
call_depth=0,
)
@@ -117,8 +117,8 @@ def test_mock_loop_node_preserves_config():
workflow_id="test",
graph_config={"nodes": [], "edges": []},
user_id="test",
user_from=UserFrom.ACCOUNT.value,
invoke_from=InvokeFrom.SERVICE_API.value,
user_from=UserFrom.ACCOUNT,
invoke_from=InvokeFrom.SERVICE_API,
call_depth=0,
)

View File

@@ -49,7 +49,7 @@ class TestRedisStopIntegration:
# Verify the command data
command_json = calls[0][0][1]
command_data = json.loads(command_json)
assert command_data["command_type"] == CommandType.ABORT.value
assert command_data["command_type"] == CommandType.ABORT
assert command_data["reason"] == "Test stop"
def test_graph_engine_manager_handles_redis_failure_gracefully(self):
@@ -122,7 +122,7 @@ class TestRedisStopIntegration:
# Verify serialized command
command_json = calls[0][0][1]
command_data = json.loads(command_json)
assert command_data["command_type"] == CommandType.ABORT.value
assert command_data["command_type"] == CommandType.ABORT
assert command_data["reason"] == "User requested stop"
# Check expire was set
@@ -137,9 +137,7 @@ class TestRedisStopIntegration:
mock_redis.pipeline.return_value.__exit__ = Mock(return_value=None)
# Mock command data
abort_command_json = json.dumps(
{"command_type": CommandType.ABORT.value, "reason": "Test abort", "payload": None}
)
abort_command_json = json.dumps({"command_type": CommandType.ABORT, "reason": "Test abort", "payload": None})
# Mock pipeline execute to return commands
mock_pipeline.execute.return_value = [

View File

@@ -87,7 +87,7 @@ def test_overwrite_string_variable():
"data": {
"title": "test",
"assigned_variable_selector": ["conversation", conversation_variable.name],
"write_mode": WriteMode.OVER_WRITE.value,
"write_mode": WriteMode.OVER_WRITE,
"input_variable_selector": [DEFAULT_NODE_ID, input_variable.name],
},
}
@@ -189,7 +189,7 @@ def test_append_variable_to_array():
"data": {
"title": "test",
"assigned_variable_selector": ["conversation", conversation_variable.name],
"write_mode": WriteMode.APPEND.value,
"write_mode": WriteMode.APPEND,
"input_variable_selector": [DEFAULT_NODE_ID, input_variable.name],
},
}
@@ -282,7 +282,7 @@ def test_clear_array():
"data": {
"title": "test",
"assigned_variable_selector": ["conversation", conversation_variable.name],
"write_mode": WriteMode.CLEAR.value,
"write_mode": WriteMode.CLEAR,
"input_variable_selector": [],
},
}

View File

@@ -298,7 +298,7 @@ def test_to_domain_model(repository):
db_model.predecessor_node_id = "test-predecessor-id"
db_model.node_execution_id = "test-node-execution-id"
db_model.node_id = "test-node-id"
db_model.node_type = NodeType.START.value
db_model.node_type = NodeType.START
db_model.title = "Test Node"
db_model.inputs = json.dumps(inputs_dict)
db_model.process_data = json.dumps(process_data_dict)

View File

@@ -107,7 +107,7 @@ def test__convert_to_http_request_node_for_chatbot(default_variables):
assert body_data
body_data_json = json.loads(body_data)
assert body_data_json["point"] == APIBasedExtensionPoint.APP_EXTERNAL_DATA_TOOL_QUERY.value
assert body_data_json["point"] == APIBasedExtensionPoint.APP_EXTERNAL_DATA_TOOL_QUERY
body_params = body_data_json["params"]
assert body_params["app_id"] == app_model.id
@@ -168,7 +168,7 @@ def test__convert_to_http_request_node_for_workflow_app(default_variables):
assert body_data
body_data_json = json.loads(body_data)
assert body_data_json["point"] == APIBasedExtensionPoint.APP_EXTERNAL_DATA_TOOL_QUERY.value
assert body_data_json["point"] == APIBasedExtensionPoint.APP_EXTERNAL_DATA_TOOL_QUERY
body_params = body_data_json["params"]
assert body_params["app_id"] == app_model.id