Skip to content

Commit cbec882

Browse files
committed
Workflow with has_ai_chat indicator passing on the tests
1 parent 7a1a74e commit cbec882

File tree

2 files changed

+143
-5
lines changed

2 files changed

+143
-5
lines changed

lib/lightning/workflows.ex

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ defmodule Lightning.Workflows do
88
alias Ecto.Multi
99

1010
alias Lightning.KafkaTriggers
11-
alias Lightning.Projects.Project
12-
alias Lightning.Repo
1311
alias Lightning.Accounts.User
1412
alias Lightning.AiAssistant.ChatSession
13+
alias Lightning.Projects.Project
14+
alias Lightning.Repo
1515
alias Lightning.Workflows.Audit
1616
alias Lightning.Workflows.Edge
1717
alias Lightning.Workflows.Events
@@ -355,9 +355,8 @@ defmodule Lightning.Workflows do
355355
on: cs.job_id == j.id,
356356
join: w in Workflow,
357357
on: j.workflow_id == w.id,
358-
where:
359-
cs.user_id == ^user_id and w.project_id == parent_as(:workflow).id and
360-
is_nil(w.deleted_at),
358+
where: cs.user_id == ^user_id,
359+
where: w.project_id == ^project_id and is_nil(w.deleted_at),
361360
select: 1
362361

363362
include = Keyword.get(opts, :include, [:triggers])

test/lightning/workflows_test.exs

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,145 @@ defmodule Lightning.WorkflowsTest do
893893
end
894894
end
895895

896+
describe "get_workflows_for/3" do
897+
setup do
898+
project = insert(:project)
899+
900+
%{user: user} =
901+
insert(:project_user, project: project, user: build(:user))
902+
903+
w1 = insert(:simple_workflow, project: project, name: "WorkflowSilent")
904+
w2 = insert(:simple_workflow, project: project, name: "WorkflowChatty1")
905+
w3 = insert(:simple_workflow, project: project, name: "WorkflowChatty2")
906+
907+
assert w1.project.id == project.id
908+
909+
Repo.update!(Ecto.Changeset.change(hd(w2.triggers), %{enabled: false}))
910+
911+
insert(:chat_session,
912+
user: user,
913+
job: hd(w2.jobs),
914+
messages: [
915+
%{role: :user, content: "what?", user: user}
916+
]
917+
)
918+
919+
insert(:chat_session,
920+
user: user,
921+
job: hd(w3.jobs),
922+
messages: [
923+
%{role: :user, content: "what not?", user: user}
924+
]
925+
)
926+
927+
%{project: project, w1: w1, w2: w2, w3: w3, user: user}
928+
end
929+
930+
test "filters workflows by search term", %{project: project, user: user} do
931+
workflows =
932+
Workflows.get_workflows_for(project, user, search: "chatty")
933+
|> Enum.sort_by(& &1.name)
934+
935+
assert Enum.map(workflows, & &1.name) == [
936+
"WorkflowChatty1",
937+
"WorkflowChatty2"
938+
]
939+
940+
assert Enum.map(workflows, & &1.has_ai_chat) == [true, true]
941+
end
942+
943+
test "returns empty list for non-matching search", %{
944+
project: project,
945+
user: user
946+
} do
947+
workflows =
948+
Workflows.get_workflows_for(project, user, search: "nonexistent")
949+
950+
assert workflows == []
951+
end
952+
953+
test "sorts workflows by name ascending", %{project: project, user: user} do
954+
workflows =
955+
Workflows.get_workflows_for(project, user, order_by: {:name, :asc})
956+
957+
names = Enum.map(workflows, & &1.name)
958+
assert names == ["WorkflowChatty1", "WorkflowChatty2", "WorkflowSilent"]
959+
end
960+
961+
test "sorts workflows by name descending", %{project: project, user: user} do
962+
workflows =
963+
Workflows.get_workflows_for(project, user, order_by: {:name, :desc})
964+
965+
names = Enum.map(workflows, & &1.name)
966+
assert names == ["WorkflowSilent", "WorkflowChatty2", "WorkflowChatty1"]
967+
end
968+
969+
test "sorts workflows by enabled state ascending", %{
970+
project: project,
971+
user: user
972+
} do
973+
workflows =
974+
Workflows.get_workflows_for(project, user, order_by: {:enabled, :asc})
975+
976+
first_workflow = List.first(workflows)
977+
last_workflow = List.last(workflows)
978+
979+
assert first_workflow.triggers |> Enum.any?(& &1.enabled) == false
980+
assert last_workflow.triggers |> Enum.any?(& &1.enabled) == true
981+
end
982+
983+
test "sorts workflows by enabled state descending", %{
984+
project: project,
985+
user: user
986+
} do
987+
workflows =
988+
Workflows.get_workflows_for(project, user, order_by: {:enabled, :desc})
989+
990+
first_workflow = List.first(workflows)
991+
last_workflow = List.last(workflows)
992+
993+
assert first_workflow.triggers |> Enum.any?(& &1.enabled) == true
994+
assert last_workflow.triggers |> Enum.any?(& &1.enabled) == false
995+
end
996+
997+
test "uses default sorting for invalid order_by", %{
998+
project: project,
999+
user: user
1000+
} do
1001+
workflows =
1002+
Workflows.get_workflows_for(project, user, order_by: {:invalid, :asc})
1003+
1004+
names = Enum.map(workflows, & &1.name)
1005+
assert names == ["WorkflowChatty1", "WorkflowChatty2", "WorkflowSilent"]
1006+
end
1007+
1008+
test "customizes preloaded associations", %{project: project, user: user} do
1009+
workflows =
1010+
Workflows.get_workflows_for(project, user, include: [:triggers])
1011+
1012+
workflow = List.first(workflows)
1013+
1014+
assert workflow.triggers != %Ecto.Association.NotLoaded{}
1015+
assert match?(%Ecto.Association.NotLoaded{}, workflow.edges)
1016+
end
1017+
1018+
test "always includes triggers even if not specified", %{
1019+
project: project,
1020+
user: user
1021+
} do
1022+
workflows = Workflows.get_workflows_for(project, user, include: [:edges])
1023+
workflow = List.first(workflows)
1024+
1025+
assert workflow.triggers != %Ecto.Association.NotLoaded{}
1026+
assert workflow.edges != %Ecto.Association.NotLoaded{}
1027+
end
1028+
1029+
test "ignores empty search term", %{project: project, user: user} do
1030+
workflows = Workflows.get_workflows_for(project, user, search: "")
1031+
assert length(workflows) == 3
1032+
end
1033+
end
1034+
8961035
defp assert_trigger_state_audit(
8971036
workflow_id,
8981037
user_id,

0 commit comments

Comments
 (0)