Skip to content

Commit 9837661

Browse files
Implement and test list endpoint
1 parent 1bafa4c commit 9837661

File tree

3 files changed

+83
-5
lines changed

3 files changed

+83
-5
lines changed

ee/ephemeral_environments/lib/ephemeral_environments/grpc/ephemeral_environments_server.ex

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ defmodule EphemeralEnvironments.Grpc.EphemeralEnvironmentsServer do
1616
CordonResponse
1717
}
1818

19-
def list(_request, _stream) do
20-
%ListResponse{}
19+
def list(request, _stream) do
20+
case EphemeralEnvironments.Service.EphemeralEnvironmentType.list(request.org_id) do
21+
{:ok, environment_types} ->
22+
%{environment_types: environment_types}
23+
24+
{:error, error_message} ->
25+
raise GRPC.RPCError, status: :unknown, message: error_message
26+
end
2127
end
2228

2329
def describe(_request, _stream) do

ee/ephemeral_environments/lib/ephemeral_environments/service/ephemeral_environment_type.ex

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
11
defmodule EphemeralEnvironments.Service.EphemeralEnvironmentType do
2+
import Ecto.Query
23
alias EphemeralEnvironments.Repo
34
alias EphemeralEnvironments.Repo.EphemeralEnvironmentType, as: Schema
45

6+
@doc """
7+
Lists all ephemeral environment types for a given organization.
8+
9+
## Parameters
10+
- org_id: String UUID of the organization
11+
12+
## Returns
13+
- {:ok, list of maps} on success
14+
"""
15+
def list(org_id) when is_binary(org_id) do
16+
environment_types =
17+
Schema
18+
|> where([e], e.org_id == ^org_id)
19+
|> Repo.all()
20+
|> Enum.map(&struct_to_map/1)
21+
22+
{:ok, environment_types}
23+
end
24+
525
@doc """
626
Creates a new ephemeral environment type.
727
828
## Parameters
929
- attrs: Map with keys:
1030
- org_id (required)
1131
- name (required)
32+
- max_number_of_instances (required)
1233
- created_by (required)
13-
- state (optional, defaults to :draft)
1434
- description (optional)
15-
- max_number_of_instances (optional)
1635
1736
## Returns
1837
- {:ok, map} on success

ee/ephemeral_environments/test/grpc/ephemeral_environments_server_test.exs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ defmodule EphemeralEnvironments.Grpc.EphemeralEnvironmentsServerTest do
77
alias InternalApi.EphemeralEnvironments.{
88
CreateRequest,
99
EphemeralEnvironmentType,
10-
EphemeralEnvironments
10+
EphemeralEnvironments,
11+
ListRequest
1112
}
1213

1314
@org_id Ecto.UUID.generate()
@@ -26,6 +27,58 @@ defmodule EphemeralEnvironments.Grpc.EphemeralEnvironmentsServerTest do
2627
end
2728

2829
describe "list/2" do
30+
test "returns empty list when no environment types exist", %{channel: channel} do
31+
request = %ListRequest{org_id: @org_id}
32+
{:ok, response} = EphemeralEnvironments.Stub.list(channel, request)
33+
assert response.environment_types == []
34+
end
35+
36+
test "returns all environment types for a specific org", %{channel: channel} do
37+
# Create environment types for the test org
38+
{:ok, env1} =
39+
Support.Factories.EphemeralEnvironmentsType.insert(org_id: @org_id, name: "Development")
40+
41+
{:ok, env1} =
42+
Support.Factories.EphemeralEnvironmentsType.insert(org_id: @org_id, name: "Staging")
43+
44+
# Create environment type for a different org (should not be returned)
45+
{:ok, _} = Support.Factories.EphemeralEnvironmentsType.insert(org_id: Ecto.UUID.generate())
46+
47+
request = %ListRequest{org_id: @org_id}
48+
{:ok, response} = EphemeralEnvironments.Stub.list(channel, request)
49+
50+
assert length(response.environment_types) == 2
51+
52+
dev_env = Enum.find(response.environment_types, &(&1.name == "Development"))
53+
assert dev_env.org_id == @org_id
54+
assert dev_env.name == "Development"
55+
56+
staging_env = Enum.find(response.environment_types, &(&1.name == "Staging"))
57+
assert staging_env.org_id == @org_id
58+
assert staging_env.name == "Staging"
59+
end
60+
61+
test "handles multiple orgs correctly", %{channel: channel} do
62+
org2_id = Ecto.UUID.generate()
63+
64+
{:ok, _} = Support.Factories.EphemeralEnvironmentsType.insert(org_id: @org_id)
65+
{:ok, _} = Support.Factories.EphemeralEnvironmentsType.insert(org_id: @org_id)
66+
67+
# Create environment types for org2
68+
{:ok, _} = Support.Factories.EphemeralEnvironmentsType.insert(org_id: org2_id)
69+
70+
# Request for org1
71+
request1 = %ListRequest{org_id: @org_id}
72+
{:ok, response1} = EphemeralEnvironments.Stub.list(channel, request1)
73+
assert length(response1.environment_types) == 2
74+
assert Enum.all?(response1.environment_types, &(&1.org_id == @org_id))
75+
76+
# Request for org2
77+
request2 = %ListRequest{org_id: org2_id}
78+
{:ok, response2} = EphemeralEnvironments.Stub.list(channel, request2)
79+
assert length(response2.environment_types) == 1
80+
assert Enum.all?(response2.environment_types, &(&1.org_id == org2_id))
81+
end
2982
end
3083

3184
describe "describe/2" do

0 commit comments

Comments
 (0)